【PowerShell】フォルダ内の画像ファイルのサイズをまとめてcsvに書き出す方法

PowerShell

どうもご無沙汰してます。coto.です。
今回はPNG画像のサイズ(幅と高さのピクセル数)を自動で一覧表を作りcsvに書き出す方法です。

使用ソフト

Windows PowerShell (Windows7以降のPCならインストールしなくても標準で搭載されています。初めて使う場合はスタートボタン右の検索バーに入力するとすぐ見つかります。)

コード(というかコマンド?)

# 設定項目
[string]$InFolder  = '①C:\Users\自分のPCの名前\Desktop\test'
[string]$OutFolder = '②C:\Users\自分のPCの名前\Desktop\test'

# 開始
Add-Type -AssemblyName System.Drawing

# カスタムオブジェクト作る
$Sizes = @()

# ③pngだけファイル名抽出(→処理に回す)
$array = Get-ChildItem $InFolder -Filter "*.png"

foreach($filename in $array) {

 # 画像ファイルの読み込み
  $image = New-Object System.Drawing.Bitmap($filename.FullName)

# カスタムオブジェクトに格納する要素作って入れる
  $Size = New-Object PSObject | Select-Object Name, Width, Height
  $Size.Name   = $filename.Name
  $Size.Width  = $image.Width
  $Size.Height = $image.Height

  $Sizes += $Size

# オブジェクトの破棄
  $image.Dispose()

}

# カスタムオブジェクト表示
$Sizes | ft -AutoSize

# カスタムオブジェクトをcsvへエクスポート
$Sizes | Export-Csv  -Path $OutFolder\size.csv -NoTypeInformation

解説と使い方

① 1行目 C:\Users\自分のPCの名前\Desktop\test のところはサイズを取得したい画像ファイルが入っているフォルダを絶対パスで入れてください。絶対パスはフォルダ上部のパンくずリンク部を右クリック>「アドレスのコピー」で簡単に取得できます。

フォルダ内には↓の感じで画像ファイルが並んでいればOK。他の関係ないファイルが入っていても大丈夫です。

② 2行目 は最後吐き出したcsvを保存するフォルダの絶対パスです。画像ファイルと同じフォルダでも問題ありません。

③ サイズを知りたい画像ファイルの形式がJPGなどPNG以外の場合12行目の*.pngを書き換えてください(*.jpgなど)。PNG形式のみなら①、②の設定だけで終了です。拡張子の表記が大文字と小文字混ざっていても大丈夫です(.PNG と.pngなど)。

使い方

1.メモ帳などにコードをコピーし上記の①~③を設定する。

2.PowerShellを開く

3.1.で作製したコードを全てコピーしたらPowerShellの画面上で右クリック

↓画像のように画像ファイルの名前(Name)、幅(Width)、高さ(Height) がばーっと出てこれば成功です。数秒待っても出てこない場合は開始されていない可能性があるので一度エンターキーを押してください。

コピペしたコードの下に画像ファイルのサイズが取得され始めたら起動は成功しています

4.size.csvという名前でcsvが吐き出されているので中身を確認

フォルダ内にsize.csvが作成される
吐き出されたcsvの中身

御託

今回のも趣味のストックフォトのためのコードですね。

フォトショなど写真編集用のソフトを使えばたぶんそういう機能もあると思うんですが、速く、楽に、インストール不要で、を目指して作りました。

フォトショ自体開くのに案外時間かかったり、多機能すぎてどこだったっけ?ってなったり、そもそもソフト持ってなかったり。できれば新しいソフトって入れたくないし。。。

サイズを一定にして写真を撮っている場合はまだ良いのですが、縦向きの写真と横向きの写真を別々に抽出する、サイズがバラバラなイラストを扱うなどの時、画像ファイルのサイズが欲しくなりませんか。

私は画像の縦横比が〇のときブログには〇〇%で画像を表示する、などのようにプログラムを組むために利用しています。

このコードを作る前は一つ一つ手作業で打ち込んでいたのでだいぶ時短になりました。

やっていることは「ファイルのプロパティを取得する」ことなので、画像のサイズだけでなくファイルの重さや動画の長さなどいろいろなことに応用できそうですね。拡張子がバラバラな場合はそこも変える必要がありそうですが。。。

どなたかのお役にたてればうれしいです。

コメント