DuKiccoの雑記

My Life Is Myself

【画像処理、ImageMagickをエクセルVBAから使う】

目的
様々な画像処理をVBAから行う。
画像処理例
・フォルダ内の画像ファイルを一括で縮小やリサイズを行う
・フォルダ内の画像ファイルを一括で別形式に変換する(→jpg,png,pdf,etc)
・フォルダ内のjpgファイルをまとめ1つのpdfファイルにする
・画像ファイルのサイズ等の情報を取得する
・2つの画像を合成する


上記の内容はVBA単独では難しいのでフリーソフトImageMagickVBAから利用できるようにする。
ImageMagickとは?

www.atmarkit.co.jp


準備
1.ImageMagickのダウンロード
Windowsのbit数ではなく使用するOfficeのbit数に合わせるとのこと
http://www.imagemagick.org/script/binary-releases.php
f:id:DuKicco:20160607070453j:plain

2.ImageMagickのインストール
VBAから利用できるように「Install ImageMagickObject OLE Control for VBScript, Visual Basic, and WSH」にチェックを入れる
f:id:DuKicco:20160607070407j:plain


3.VBAでのImageMagicObjectの参照設定にチェクを入れる
f:id:DuKicco:20160607070432j:plain


以下、実例

Sub ImageMagick一括圧縮()
'指定したフォルダ内の画像(jpg)を一括し圧縮する(上書き)
Dim FolPath As String

'任意のフォルダを選択
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = titlestr
        If .Show = -1 Then
            FolPath = .SelectedItems(1)
        Else
            Exit Sub
        End If
End With

   Set img = New ImageMagickObject.MagickImage
   
   Debug.Print img.Identify("-format", "%h", FolPath & "\*.jpg") '選択前のサイズを出力
   
   img.Mogrify "-resize", "65%", FolPath & "\*.jpg" '選択したフォルダ内のjpgを65%圧縮。上書きモード注意!
   
   Debug.Print img.Identify("-format", "%h", FolPath & "\*.jpg") '選択後のサイズを出力
   Set img = Nothing
   
End Sub