Ошибка при экспорте raphaeljs в jpg с фоном пути в качестве изображения

У меня проблема с плагином экспорта raphaeljs (https://github.com/ElbertF/Raphael.Export). в элементе пути я использую атрибут fill, а в качестве источника я даю URL-адрес изображения для заполнения. Но когда я экспортирую это в SVG, я вижу определение элемента пути, но когда я экспортирую его в PNG, я больше не вижу.

Итак, в моем приложении я добавляю элемент attr to path следующим образом:

paper.path("M 195 10 L 300  L 195 z").attr({'stroke-width': 0,'fill': 'url(images/alfen/02/murek.png)'});

и я экспортирую его с помощью paper.toSVG()

и в моем SVG я нахожу путь:

<path transform="matrix(1,0,0,1,0,0)" fill="url(images/alfen/02/murek.png)" stroke="#000" d="M203,183.94389438943895L948,183.94389438943895L948,195L203,195Z" stroke-width="0"></path>

Но когда я преобразую это в PNG с помощью:

<?php 
    $json        = $_POST['json'];
    $output      = str_replace('\"','"',$json);
    $filenameSVG = 'test';

    file_put_contents("$filenameSVG.svg", $output);

    $konwert = "convert $filenameSVG.svg $filenameSVG.jpg";

    system($konwert);

Я не могу найти этот путь, выполненный с моим фоном. Может ли кто-нибудь помочь?

Ответ 1

Если вы можете получить правильный вывод в svg, но он не подходит для png в php, вам нужно проверить несколько вещей.

  • Как проверка работоспособности убедитесь, что ваш $_POST ['json'] не возвращает неверный json
  • Следующая строка в вашем php меня смущает: $output = str_replace('\"','"',$json);
  • Возможно, что json, который вы возвращаете, является единственным объектом, но я все еще не уверен, почему вы просматриваете весь файл и не ищете определенный вложенный объект, например $output = str_replace('\"','"',$json['filename_and_path']);, и если вы возвращаете json Является единственной линией, могут быть более эффективные способы ее обработки, т.е. Отправлять ее как строку или даже возвращать каждый из них с массивом и индексом.

И для этого:

$konwert = "convert $filenameSVG.svg $filenameSVG.jpg";
system($konwert);

Вы не можете кормить system() допустимыми переменными в своей строке. Конечно, я рекомендую правильно конкатенировать строку, например:

$konwert = "convert".$filenameSVG.".svg ".$filenameSVG.".jpg";

Вам также понадобится абсолютный путь к файлу на вашем сервере для выполнения команды, иначе он не найдет файл. Код $konwert = "convert".$filenameSVG.".svg ".$filenameSVG.".jpg";, очевидно, будет работать только для вас, если эти два файла находятся в корневой директории вашего проекта.

Я также не думаю, что вы должны использовать system() в этом случае. Насколько я понимаю, вы должны использовать passthru() для работы с бинарниками изображений. Там также exec(), но на самом деле, я думаю, что вам нужно здесь passthru(). См.: http://www.php.net/manual/en/function.passthru.php

Ответ 2

Похоже, ваш путь - это просто создать контейнер для изображения. Не могли бы вы использовать:

paper.image('images/alfen/02/murek.png', 50, 50, 300, 195);

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

И вы все равно можете использовать: paper.toSVG()

Я смог получить эту версию без каких-либо проблем.