从VBScript调用ImageMagick COM

时间:2012-01-13 09:27:28

标签: vbscript imagemagick

我已成功使用以下命令行创建一个带有简单文本的新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")

3 个答案:

答案 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