我在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。
答案 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用户授予“更改”权限,我添加了“写入”权限。