提到图片格式转换,大家肯定会想到大名鼎鼎的PS,只是为了转换图片格式,就需要再电脑中安排这么一个庞然大物,并且其操作界面有些太专(复)业(杂),逐个打开图片文件进行操作,也比较耗费时间,其实VBA中也可以轻松实现批量图片格式转换。
WIA的滤镜功能可以轻松实现图片格式转换,几行代码将够用了。
示例代码如下。
Sub Demo()
Dim objWIA_IMG As Object
Dim objWIA_PRO As Object
Const STR_WIA_BMP = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"
Const STR_WIA_PNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
Const STR_WIA_GIF = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}"
Const STR_WIA_JPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
Const STR_WIA_TIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"
Set objWIA_IMG = CreateObject("WIA.ImageFile")
Set objWIA_PRO = CreateObject("WIA.ImageProcess")
objWIA_IMG.LoadFile "C:\Temp\1.jpg"
objWIA_PRO.Filters.Add objWIA_PRO.FilterInfos("Convert").FilterID
objWIA_PRO.Filters(1).Properties("FormatID").Value = STR_WIA_PNG
Set objWIA_IMG = objWIA_PRO.Apply(objWIA_IMG)
On Error Resume Next
Kill "C:\Temp\1.png"
On Error GoTo 0
objWIA_IMG.SaveFile "C:\Temp\1.png"
Set objWIA_IMG = Nothing
Set objWIA_PRO = Nothing
End Sub
【代码解析】
第4~8行代码定义图片格式相关常量。
第9行代码创建WIA.ImageFile
对象,用于加载图片。
第10行代码创建WIA.ImageProcess
对象,用于转换图片格式。
第11行代码加载JPG图片文件。
第12行代码增加转换滤镜。
第13行代码设置滤镜格式为PNG。
第14行代码应用转换滤镜实现图片格式转换。
第15~17行代码删除目标文件,以避免称重名文件产生运行时错误。
第18行代码将转换后的图片保存为PNG文件。
第19~20行代码释放对象变量占用的系统资源。
批量处理图片文件,只需要使用Dir或者FSO获取文件名,再由循环结构依次处理即可。