2015-08-31 70 views
1

我想通过VBA中的ImageMagick将从互联网[1]下载的图像转换为JPG。到目前为止,我已经尝试了两种都失败的方法。使用ImageMagick从VBA转换图像

首先,我尝试使用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 \图像“)存在,但是要创建的文件(”C \ temp \ image.jpg“)没有。这与发布的here问题非常相似,但我至今尚未找到解决方案。

其次,我试过只调用ImageMagick的使用Shell命令:

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内运行时根本不工作?我不知道这是否是有用的信息,但我以编程方式从互联网上下载图像,所以我无法知道我得到什么格式;我不知道这是什么格式。不过,我用来测试这个图片的图片是PNG。

+0

您是否尝试** convert.exe **的完整路径? – PatricK

+0

是的。我做了,并没有改变结果。 – tlewis3348

+1

'Shell(“cmd.exe/c”“”“”“”&sLocalFile&“”“”“”&sLocalFile&“.jpg”“”)'? – PatricK

回答

0

问题是Shell真的只限于开放程序。因此,有必要实际告诉它打开命令提示符并运行相应的命令。这可以通过将Shell命令更改为以下行来完成:

RetVal = Shell("cmd.exe /c convert.exe """ & sLocalFile & """ """ & sLocalFile & ".jpg""") 
相关问题