2011-11-10 62 views
1

我在Classic ASP中使用ImageMagickObject COM +。我正嘗試將SVG文件轉換爲PNG文件。我試過的例子看出hereImageMagick COM +:試圖通過經典ASP將SVG文件轉換爲PNG

convert rose.jpg rose.png 

在命令行執行時也能正常工作。這個例子在使用傳統的ASP執行時也有效。所以,一切似乎都奏效。然後我通過ASP嘗試相同的命令,只使用SVG文件而不是JPG作爲源文件,如下所示:

convert rose.svg rose.png 

這不起作用。我沒有錯誤,但仍然沒有PNG文件。

所以我然後在命令行嘗試這個命令,它的工作原理。我嘗試過不同的SVG文件,它們都無法使用ASP進行轉換,但都通過命令行工作。

因此組件似乎被安裝,我可以轉換和寫入文件從ASP,所以我猜測權限也很好。

這裏有什麼問題?

由於

編輯:

我修改下面貼的例子。此代碼當前工作:

Dim sourceFile : sourceFile = server.mappath("/tempbild/rose.jpg") 
Dim destFile : destFile = server.mappath("/tempbild/test.png") 

Dim img: Set img = CreateObject("ImageMagickObject.MagickImage.1") 
Dim DrawResult 
DrawResult = img.Convert(sourceFile, destFile) 
If Err.Number <> 0 Then 
    Response.Write("ImageMagick component failed: " & Err.Number & ": " & 
Err.Description) 
else 
    response.write("ImageMagick component tested successfully: " & DrawResult) 
end if 

Set img = nothing 

當我更改文件類型SVG在任的資源文件或destFile,那麼它停止工作。我沒有收到錯誤消息,也沒有DrawResult。

回答

0

好吧,我終於找到了答案here。看起來IIS在使用jpg和png轉換時不使用TEMP目錄,這就是它工作的原因。但是,當轉換成svg或從svg轉換時,TEMP目錄將被寫入。在服務器的TEMP目錄(在我的情況下是c:\ windows \ temp),您至少需要給IUSR用戶「更改」權限,我添加了「寫入」權限。

0

如果您使用COM對象,ImageMagick具有相當獨特的工作方式。
命令行中的參數應作爲COM調用中的字符串傳遞,但它們保留其「 - 」前綴。
我有一個繪製多邊形的例子功能,這應該給你一個想法如何實現ASP ImageMagick的說明:

function DrawPoly(destFile, coordinates, fillcolor, strokecolor) 
    ' Draws a single polygon and returns a result-image 
    Dim img: Set img = CreateObject("ImageMagickObject.MagickImage.1") 
    dim polygon, DrawCommand, DrawResult 
     polygon = trim(coordinates) 
     DrawCommand = "polygon " & trim(polygon) 
     DrawResult = img.Convert(Server.Mappath(destFile), "-matte", "-fill", fillColor, "-stroke", strokeColor, "-draw", DrawCommand, Server.Mappath(destFile)) 
     If Err.Number <> 0 Then Response.Write(Err.Number & ": " & Err.Description & vbCrLf & msgs) 
    DrawPoly = destFile 
    Set img = nothing 
end function 

編輯:這裏是另一段代碼,簡單一點,看看ImageMagick的完全可以工作。請注意,您需要爲寫入圖像的目錄中的IUSR_ [machinename]寫入權限。

Dim destFile : destFile = server.mappath("/test.jpg") 
    Dim img: Set img = CreateObject("ImageMagickObject.MagickImage.1") 
    Dim DrawResult 
     DrawResult = img.Convert("logo:","-format","%m,%h,%w",destFile) 
     If Err.Number <> 0 Then 
      Response.Write("ImageMagick component failed: " & Err.Number & ": " & Err.Description) 
     else 
      response.write("ImageMagick component tested successfully: <a href=""/~temp/test.jpg"" target=""_blank"">" & DrawResult & "</a>") 
     end if 

Set img = nothing 

HTH,

埃裏克

+0

非常感謝您的幫助。請看我的編輯。 – Challe

+0

Charles,你想轉換爲SVG或PNG? SVG是一種矢量格式,我可以想象這將不起作用... –

+0

我想從SVG轉換爲PNG。我設法使用我的答案在下面工作。 – Challe