Вызов ImageMagick COM из VBScript - PullRequest
       4

Вызов ImageMagick COM из VBScript

0 голосов
/ 13 января 2012

Я успешно использовал следующую командную строку для создания нового GIF-изображения с простым текстом

convert -size 100x100 -font arial label:blah output.gif

Я хотел бы добиться того же результата, используя интерфейс COM из VBScript, но не увенчался успехоммимоходом в тех же параметрах в. Вот мой код ...

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

Кто-нибудь знает, что я делаю неправильно?

[Edit]

В ответ на ответ Эккехарда я также попытался не использовать массив.Этот код создаст выходное изображение, но label не применяется.Я также должен передать белое изображение в качестве входного, поскольку оно не будет работать без него.

msgs = img.convert("C:\temp\blank.gif", "-size", "100x100", "-font", "arial", "label:", "blah", "C:\temp\example.gif")

Ответы [ 3 ]

2 голосов
/ 14 января 2012

В конце я отказался от попытки заставить label работать при использовании COM + API и нашел решение, которое вместо этого использует -draw. Ekkehard был прав в том, что не использовал Array, а вместо этого использовал отдельные аргументы, как показано ниже.

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 голос
/ 14 января 2012

В папке [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:")

Таким образом, передача всех параметров в одном массиве так же неверна, как и попытка установить свойства.Я использовал вывод

  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, я могу только предположить, что такие аргументы предполагают существующий входной файл.

Так что проводите тестирование COM, когда вы проверили параметры из командной строки.

0 голосов
/ 13 января 2012

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...