使用 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""")