2012-01-13 46 views
0

調用ImageMagick的COM我已經成功地使用下面的命令行用一些簡單的文字從VBScript

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

我想利用VBScript中的COM接口來實現相同的結果創建一個新的GIF圖像,但有在通過在相同的參數沒有成功。這是我的代碼...

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 
0執行該代碼

和輸出我得到的是這樣的,並沒有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") 

回答

2

最後,我放棄了在使用COM + API時試圖讓label工作,並且使用-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") 
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

+0

你知道TLViewer是否可以在Windows 7上運行?我沒有Visual Studio,並且無法使用regsvr32註冊Tlbinf32.dll。它抱怨文件丟失(不)或者它有其他依賴的DLL。我找不到任何文檔告訴我任何依賴的DLL。 BNut一個提到Windows 7的尋呼機將不支持Tlbinf32.dll – Brad 2012-01-13 23:06:05

+0

我似乎記得在兼容模式下讓它在Windows 7上運行。 – Nilpo 2012-01-16 16:35:26

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:") 

因此,傳遞一個數組中的所有參數是錯誤的嘗試設置屬性。我用

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測試。

+0

我已經從命令行中確認了參數,正如我的問題中的第一個代碼示例所解釋的那樣。如果我複製相同的參數到我的VBScript作爲一個字符串(而不是數組),它不起作用,似乎需要一個輸入圖像。如果我創建一個輸入圖像並將其添加爲參數,則'label:blah'不會應用於輸出圖像。這是我的問題。 – Brad 2012-01-13 22:58:54