我已成功使用以下命令行创建一个带有简单文本的新GIF图像
convert -size 100x100 -font arial label:blah output.gif
我想使用VBScript的COM接口获得相同的结果,但是在传递相同的参数时没有成功。这是我的代码...
Dim img
Set img = CreateObject("ImageMagickObject.MagickImage.1")
Dim fnm(6)
fnm(0) = "-size"
fnm(1) = "100x100"
fnm(2) = "-font"
fnm(3) = "arial"
fnm(4) = "-label"
fnm(5) = "blah"
fnm(6) = "C:\temp\example.gif"
retval = img.convert(fnm)
wscript.echo("retval " & retval)
我按如下方式执行此代码
cscript example.vbs
,我得到的输出就是这个,没有创建GIF文件......
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
Version: ImageMagick 6.7.4-3 2011-12-24 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP
Usage: cscript.exe [options ...] file [ [options ...] file ...] [options ...] file
我在Windows7上使用ImageMagick-6.7.4-Q16
有谁知道我做错了什么?
[编辑]
为了回应Ekkehard的回答,我也试过不使用数组。此代码将创建输出图像,但不应用label
。我还必须传入白色图像作为输入,因为没有它就无法工作。
msgs = img.convert("C:\temp\blank.gif", "-size", "100x100", "-font", "arial", "label:", "blah", "C:\temp\example.gif")
答案 0 :(得分:2)
最后,我放弃了尝试让label
在使用COM + API时工作,并且有一个使用-draw
的解决方案。 Ekkehard对于不使用数组是正确的,而是使用如下所示的单个参数。
msgs = img.convert( "c:\temp\blank.gif", "-font", "arial", "-pointsize", "36", "-gravity", "center", "-fill", "blue", "-draw", "text 0,0 'blah'", "c:\temp\example.gif")
答案 1 :(得分:1)
在文件夹[WhereEver]\ImageMagick-6.7.4-Q16\ImageMagickObject\Tests
中,您将找到两个示例脚本(ArrayTest.vbs,SimpleTest.vbs)。第二个最重要的信息:
' The argument list is exactly the same as the utility programs
' as a list of strings. In fact you should just be able to
' copy and past - do simple editing and it will work. See the
' other samples for more elaborate command sequences and the
' documentation for the utility programs for more details.
'
msgs = img.Convert("logo:","-format","%m,%h,%w","info:")
因此,将所有params传递到一个数组中与尝试设置属性一样错误。我用了
Dim sSrcFSpec : sSrcFSpec = "..\data\logo.jpg"
Dim sDstFSpec : sDstFSpec = "..\data\logo.png"
If goFS.FileExists(sDstFSpec) Then goFS.DeleteFile sDstFSpec
CreateObject("ImageMagickObject.MagickImage.1").convert "-verbose", sSrcFSpec, sDstFSpec
If Not goFS.FileExists(sDstFSpec) Then WScript.Echo "Failure!"
输出:
..\data\logo.jpg JPEG 123x118 123x118+0+0 8-bit DirectClass 16.2KB 0.000u 0:00.006
..\data\logo.jpg=>..\data\logo.png JPEG 123x118 123x118+0+0 8-bit DirectClass 0.030u 0:00.
083
证明如果你传递合理的论据,你会得到结果。我尝试了类似于你的测试代码的东西 -
convert -verbose -size 100x100 -font arial -label blah ..\data\example.gif
得到了:
convert.exe: missing an image filename `..\data\example.gif' @ error/convert.c/ConvertImag
eCommand/3016.
对ImageMagick一无所知,我只能假设这样的args假设现有的输入文件。
当您从命令行验证参数时,请进行COM测试。
答案 2 :(得分:0)
COM接口将公开一系列用于控制对象的属性和方法。你不会通过传递一组值来实例化它。在大多数情况下,您可以单独设置每个属性。它可能看起来像这样(纯粹是一个例子,我不知道这些是否是这个对象的真正属性):
Dim img
Set img = CreateObject("ImageMagickObject.MagickImage.1")
img.sizeX = 100
img.sizeY = 100
img.font = "Arial"
img.label = "blah"
retval = img.convert("C:\temp\example.gif")
WScript.echo("retval " & retval)
可以使用对象浏览器或类型库查看器来检查COM对象的属性和方法。我最喜欢的是TLViewer。