ImageMagick COM +:尝试通过Classic ASP将SVG文件转换为PNG

时间:2011-11-10 18:38:33

标签: vbscript asp-classic svg imagemagick

我在Classic ASP中使用ImageMagickObject COM +。我正在尝试将SVG文件转换为PNG文件。我试过看过here的例子:

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

当我在sourceFile或destFile中将文件类型更改为SVG时,它将停止工作。我没有收到错误消息,也没有DrawResult。

2 个答案:

答案 0 :(得分:0)

如果使用COM对象,ImageMagick有一种相当独特的工作方式 命令行中的参数应该在COM调用中作为字符串传递,但它们保持&#34; - &#34;前缀。
我有一个绘制多边形的示例函数,可以让您了解如何在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,

埃里克

答案 1 :(得分:0)

好的,我终于找到了答案here。在jpg和png之间转换时,似乎IIS不使用TEMP目录,这就是它工作的原因。但是,当转换为svg或从svg转换时,将写入TEMP目录。在服务器的TEMP目录(在我的情况下为c:\ windows \ temp)中,您至少需要为IUSR用户授予“更改”权限,我添加了“写入”权限。