• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA gif形式 → bmp形式に変換)

VBAでwebサイト内のgif画像をbmp形式に変換する方法

このQ&Aのポイント
  • webサイト内のgif画像をダウンロードして保存する際に、VBAを使用してURLDownloadToFile APIを利用する方法を解説します。
  • IEで表示されているページのgif画像をbmp形式に変換して保存することが可能かどうかについて、初心者でもわかりやすく説明します。
  • VBAを使用してgif画像をbmp形式に変換し、保存する方法について詳しく解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。調子に乗って、 こちらで紹介している、フリーのクラスを使用します http://okwave.jp/qa/q7523814.html 余分なところが長いですが、やっている事は単純です。(面倒な事はクラスがやってくれます) なお、他にもtif形式にも対応しているそうです。 'http://arkham46.developpez.com/articles/office/clgdiplus/ 'Le module clGdiPlus au format cls pour toutes versions d'Office.v2.0 (11/01/11)をダウンロードして解凍 'Excelにインポート '#Const Access = True -> False に 'Microsoft Forms 2.0 Object Libraryに参照設定 Sub test4() Dim clGdip As ClGdiPlus Dim retBool As Boolean Dim OpenFileName As Variant, vntFileName As Variant Dim srcfile As String, destfile As String Dim pictType As String Const jpegQuality As Long = 90 OpenFileName = Application.GetOpenFilename("画像ファイル,*.jpg;*.bmp;*.png;*.gif") If OpenFileName <> False Then srcfile = OpenFileName Else Exit Sub End If Set clGdip = New ClGdiPlus retBool = clGdip.OpenFile(srcfile) If Not retBool Then Exit Sub 'ファイルを保存するダイアログを開きます vntFileName = _ Application.GetSaveAsFilename(InitialFileName:="Picture.jpg" _ , FileFilter:="画像ファイル,*.jpg;*.bmp;*.png;*.gif" _ , FilterIndex:=1 _ , Title:="保存先の指定" _ ) If vntFileName <> False Then Select Case StrConv(Right(vntFileName, 3), vbUpperCase) Case "JPG" pictType = "JPG" Case "BMP" pictType = "BMP" Case "PNG" pictType = "PNG" Case "GIF" pictType = "GIF" Case Else MsgBox "サポートされていない画像形式です" Exit Sub End Select destfile = vntFileName Else Exit Sub End If If pictType = "JPG" Then retBool = clGdip.SaveFile(destfile, "JPG", jpegQuality) Else retBool = clGdip.SaveFile(destfile, pictType) End If Set clGdip = Nothing End Sub

tokyo2199
質問者

お礼

ありがとうございます。画像処理はやはり初心者の私に敷居が高そうですね。APIなど絡んでくると理解するまでに時間がかかります。mitarashi様のご指南下さったコードは大変良い勉強材料となりそうです。少しずつ勉強していきたいと思っています。 とりあえずクラスをインポートし、参照設定後コードを実行させてもらったのですが、jpgへ変換されてしまいます。bmpへ変換したいのですが、何か手を加える必要があるのでしょうか?勉強不足のため質問ばかりで申しわけありません。お時間があるときにでも追記頂ければ幸いです。

その他の回答 (1)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

もっと簡単な方法があるかもしれませんが 'http://okwave.jp/qa/q5124395.html 'こちらのKenKen_SPさんのコードを借用します 'API宣言部に追加要 上記コードの先頭の方に仲間が居るので、そこに追加します 'CreateBitmapFromFile Private Declare Function GdipCreateBitmapFromFile Lib "gdiplus" _ (FileName As Any, bitmap As Long) As Long 'CreatHBITMAPFromBitmap Private Declare Function GdipCreateHBITMAPFromBitmap Lib "gdiplus" _ (ByVal bitmap As Long, hbmReturn As Long, _ ByVal background As Long) As Long 下記の様なコードで変換ができました。 最近のWindowsではCドライブ直下に簡単にアクセスできないと思いますので、適宜書き換えてお試し下さい。 Sub sample2() If sample3("c:\test.gif", "c:\test.bmp") Then MsgBox "成功" Else MsgBox "失敗" End If End Sub Function sample3(srcfile As String, destfile As String) As Boolean Dim srcBmp As Long Dim hBmp As OLE_HANDLE 'GDI を初期化する If GDIplus_Initialize() = False Then MsgBox "GDI+ を初期化できません", vbCritical Exit Function End If 'ファイルからビットマップオブジェクトに読み込む If GdipCreateBitmapFromFile(ByVal StrPtr(srcfile), srcBmp) <> 0 Then Call Gdiplus_Shutdown Exit Function End If 'ビットマップオブジェクトのハンドル取得 If GdipCreateHBITMAPFromBitmap(srcBmp, hBmp, &HFFFFFF) <> 0 Then Call Gdiplus_Shutdown Exit Function End If If SaveImageToFile(hBmp, destfile, "bmp") = True Then sample3 = True ' GDI+ を終了させる(必ず呼び出すこと) Call Gdiplus_Shutdown End Function

関連するQ&A

専門家に質問してみよう