2011-11-10 42 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