我想将从互联网[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
这最终会给我以下错误:
源文件(“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。
答案 0 :(得分:0)
问题是Shell
实际上只适用于打开程序。因此,有必要实际告诉它打开命令提示符并运行适当的命令。这可以通过使用Shell
命令将行更改为以下内容来完成:
RetVal = Shell("cmd.exe /c convert.exe """ & sLocalFile & """ """ & sLocalFile & ".jpg""")