Ошибка при экспорте 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()
Я смог получить эту версию без каких-либо проблем.