ImageMagick COM +: Попытка конвертировать SVG-файл в PNG через классический ASP - PullRequest
1 голос
/ 10 ноября 2011

Я использую ImageMagickObject COM + в классическом ASP. Я пытаюсь преобразовать SVG-файл в файл PNG. Я попробовал пример здесь :

convert rose.jpg rose.png

Это прекрасно работает, когда выполняется в командной строке. Этот пример также работает при выполнении с использованием классического ASP. Итак, все, кажется, работает. Затем я пробую ту же команду через ASP, используя только SVG-файл вместо JPG в качестве исходного файла, например:

convert rose.svg rose.png

Это не работает. Я не получаю ошибку, но все еще нет PNG-файла.

Итак, я попробовал эту команду в командной строке, и она работает. Я пробовал разные SVG-файлы, и все они не могут конвертироваться с использованием ASP, но все работают через командную строку.

Компонент, таким образом, кажется установленным, и я могу конвертировать и записывать в файл из ASP, поэтому я предполагаю, что права также хороши.

В чем может быть проблема здесь?

Спасибо

EDIT:

Я изменил пример, размещенный ниже. Этот код в настоящее время работает:

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 в sourceFile или destFile, он перестает работать. Я не получаю сообщение об ошибке и не DrawResult.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2011

Хорошо, мне наконец-то удалось найти ответ здесь . Кажется, что IIS не использует каталог TEMP при преобразовании между JPG и PNG, поэтому он работает. Однако при преобразовании в или из svg каталог TEMP записывается в. В каталоге TEMP сервера (в моем случае c: \ windows \ temp) вам нужно как минимум предоставить права «изменить» пользователю IUSR, я добавил права «записи».

0 голосов
/ 11 ноября 2011

ImageMagick имеет довольно уникальный способ работы, если вы используете объект COM.
Параметры в командной строке должны передаваться как строки в вызове COM, но они сохраняют свой префикс "-".
У меня естьпример функции, которая рисует многоугольник, которая должна дать вам представление о том, как реализовать инструкции Imagemagick в ASP:

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

edit: вот еще один фрагмент кода, немного проще, чтобы посмотреть, работает ли ImageMagick ввсе.Обратите внимание, что вам нужно дать разрешение на запись для IUSR_ [имя_машины] в каталоге, в котором вы пишете изображение.

    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,

Эрик

...