使用ImageMagick从VBA转换图像

时间:2015-08-31 20:09:32

标签: vba imagemagick imagemagick-convert

我想将从互联网[1]下载的图像转换为使用VBA中的ImageMagick的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

这最终会给我以下错误:

MSVB Error Message

源文件(“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命令在单独的命令窗口中执行的命令时,转换完全按照我的预期进行。

那么问题似乎就是为什么ImageMagick命令在它自己的命令提示符下运行时工作得很漂亮,但在VBA中运行时根本不工作?

[1]我不知道这是否是有用的信息,但我是以编程方式从互联网上下载图像,所以我无法知道我得到的格式;但是,我用来测试它的图像是PNG。

1 个答案:

答案 0 :(得分:0)

问题是Shell实际上只适用于打开程序。因此,有必要实际告诉它打开命令提示符并运行适当的命令。这可以通过使用Shell命令将行更改为以下内容来完成:

RetVal = Shell("cmd.exe /c convert.exe """ & sLocalFile & """ """ & sLocalFile & ".jpg""")