使用 ImageMagick 从 VBA 转换图像
Convert Image from VBA Using ImageMagick
我想在 VBA 中使用 ImageMagick 将从互联网[1] 下载的图像转换为 JPG。到目前为止,我尝试了两种方法都失败了。
首先,我尝试使用 ImageMagickObject 1.0 类型库:
Private Sub CommandButtonOkay_Click()
Dim sURL As String, sNetFile As String, sLocalFile As String, _
cmd As String, RetVal As Integer, img As Object
Set img = New ImageMagickObject.MagickImage
sURL = UserForm1.TextBoxImgURL
sLocalFile = "C:\temp\" & UserForm1.TextBoxName
DownloadFile sURL, sLocalFile ' Function to download image from a URL and save it to a local directory
RetVal = img.Convert(sLocalFile, sLocalFile & ".jpg") '<-- This line produces the error
UserForm1.Hide
End Sub
这最终给我以下错误:
源文件(“C:\temp\image”)存在,但要创建的文件(“C\temp\image.jpg”)不存在。这与 here 发布的问题非常相似,但到目前为止我还没有找到解决方案。
其次,我尝试使用 Shell
命令调用 ImageMagick:
Private Sub CommandButtonOkay_Click()
Dim sURL As String, sNetFile As String, sLocalFile As String, _
cmd As String, RetVal As Integer
sURL = UserForm1.TextBoxImgURL
sLocalFile = "C:\temp\" & UserForm1.TextBoxName
DownloadFile sURL, sLocalFile ' Function to download image from a URL and save it to a local directory
RetVal = Shell("convert.exe """ & sLocalFile & """ """ & sLocalFile & ".jpg""")
UserForm1.Hide
End Sub
当我 运行 执行此操作时,图像下载正常,但图像未转换且未抛出任何错误。此外,当我执行 Shell
命令在单独的命令 window 中执行的命令时,转换完全符合我的预期。
所以问题似乎是,为什么 ImageMagick 命令在其自己的命令提示符下运行时运行良好,但在 VBA 中运行时却根本不起作用?
[1] 我不知道这是否是有用的信息,但我正在以编程方式从互联网上下载图像,所以我无法知道我得到的是什么格式;但是,我用来测试它的图像是 PNG。
问题是 Shell
实际上只用于打开程序。因此,有必要实际告诉它打开命令提示符和 运行 适当的命令。这可以通过将带有 Shell
命令的行更改为以下内容来完成:
RetVal = Shell("cmd.exe /c convert.exe """ & sLocalFile & """ """ & sLocalFile & ".jpg""")
我想在 VBA 中使用 ImageMagick 将从互联网[1] 下载的图像转换为 JPG。到目前为止,我尝试了两种方法都失败了。
首先,我尝试使用 ImageMagickObject 1.0 类型库:
Private Sub CommandButtonOkay_Click()
Dim sURL As String, sNetFile As String, sLocalFile As String, _
cmd As String, RetVal As Integer, img As Object
Set img = New ImageMagickObject.MagickImage
sURL = UserForm1.TextBoxImgURL
sLocalFile = "C:\temp\" & UserForm1.TextBoxName
DownloadFile sURL, sLocalFile ' Function to download image from a URL and save it to a local directory
RetVal = img.Convert(sLocalFile, sLocalFile & ".jpg") '<-- This line produces the error
UserForm1.Hide
End Sub
这最终给我以下错误:
源文件(“C:\temp\image”)存在,但要创建的文件(“C\temp\image.jpg”)不存在。这与 here 发布的问题非常相似,但到目前为止我还没有找到解决方案。
其次,我尝试使用 Shell
命令调用 ImageMagick:
Private Sub CommandButtonOkay_Click()
Dim sURL As String, sNetFile As String, sLocalFile As String, _
cmd As String, RetVal As Integer
sURL = UserForm1.TextBoxImgURL
sLocalFile = "C:\temp\" & UserForm1.TextBoxName
DownloadFile sURL, sLocalFile ' Function to download image from a URL and save it to a local directory
RetVal = Shell("convert.exe """ & sLocalFile & """ """ & sLocalFile & ".jpg""")
UserForm1.Hide
End Sub
当我 运行 执行此操作时,图像下载正常,但图像未转换且未抛出任何错误。此外,当我执行 Shell
命令在单独的命令 window 中执行的命令时,转换完全符合我的预期。
所以问题似乎是,为什么 ImageMagick 命令在其自己的命令提示符下运行时运行良好,但在 VBA 中运行时却根本不起作用?
[1] 我不知道这是否是有用的信息,但我正在以编程方式从互联网上下载图像,所以我无法知道我得到的是什么格式;但是,我用来测试它的图像是 PNG。
问题是 Shell
实际上只用于打开程序。因此,有必要实际告诉它打开命令提示符和 运行 适当的命令。这可以通过将带有 Shell
命令的行更改为以下内容来完成:
RetVal = Shell("cmd.exe /c convert.exe """ & sLocalFile & """ """ & sLocalFile & ".jpg""")