Я пытаюсь создать векторную графику в PHP. Я пытался Каира, и я не смог заставить его работать. Я понимаю, что imageMagick имеет векторную функциональность, но документация на php.net очень бедна, может ли кто-нибудь привести меня в правильном направлении? Идеи состоят в том, чтобы сохранить графику в EPS. Мне также нужно иметь возможность использовать разные шрифты для вывода текста.
Хотя вы ищете для создания eps, я все равно хотел бы создать PDF-файл. PDF-файлы полностью редактируются в любом крупном пакете: Adobe Illustrator, Corel Draw, Xara Pro и т. Д.
TCPDF работает хорошо, и есть куча образцов кода, включая шрифты и поддержку векторных изображений eps и ai вывод в PDF
eps / ai example http://www.tcpdf.org/examples/example_032.pdf
Все примеры и php-код http://www.tcpdf.org/examples.php
Я знаю, что это довольно старый вопрос, но у меня была проблема несколько недель назад и решить ее для себя, надеюсь, что этот ответ поможет кому-то. В библиотеке Cairo есть привязки PHP, но у нее также есть несколько ошибок, которые нарушают конвертацию между форматами – забудьте об этом. Нам нужно что-то родное здесь на старте. Посмотрите на формат SVG – откройте свое векторное изображение в редакторе (я использую Inkscape) и сохраню его как файл SVG. После этого вы можете изменить его с помощью php, как файл xml. Добавление пользовательских шрифтов в SVG:
$text_path = 'm 100,200' $font_name = 'Some_font.ttf'; $font_size = '20px'; $font = base64_encode('font_file_content'); $text = 'Bla bla bla'; $font_svg = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <path d="' . $text_path . '" id="font_id_123"/> <style type="text/css"> <![CDATA[ @font-face { font-family: ' . $font_name . '; src: url("data:font/ttf;charset=utf-8;base64,' . $font . '"); ]]> </style> </defs> <text style="font-family: ' . $font_name . '; font-size: ' . $font_size . ';"> <textPath xlink:href="#font_id_123">' . $text . '</textPath> </text> </svg>'; $content = file_get_contents($svg_file); // $svg_file - your vector image $content = substr($content, 0, -6); // cut last '</svg>' tag from file $newContent = $content . $font_svg . '</svg>'; // add font to the end file_put_contents($svg_file, $newContent); // save changes
Хорошо, у нас есть SVG с необходимыми шрифтами, но нам нужен EPS. Для преобразования SVG в EPS я использовал Inkscape с простым сценарием bash svg2eps.sh:
#!/bin/bash inkscape -f $1 -z -T -E $2
Вы можете вызвать его из php:
exec('/path/to/svg2eps.sh /path/to/in.svg path/to/out.eps');
Другие советы:
1) Установите последнюю версию Inkscape. Я тестировал его на openSuse 12.3 – отлично работает.
2) Установите все пользовательские шрифты в системные шрифты.
Попробуйте эти ссылки:
http://www.imagemagick.org/script/magick-vector-graphics.php
а также
http://www.imagemagick.org/discourse-server/viewtopic.php?f=10&t=10144
Я не могу сказать вам, как создавать векторные изображения на PHP, но, возможно, вам нужен немного другой подход – создавать растровые изображения в PHP и преобразовывать их в векторы? Он работает нормально для черно-белых изображений, не уверенных в цвете.
<?php $im = imagecreatetruecolor(500,500); //draw something on $im imagepng($im, 'image.png'); $url = 'http://img.ruphp.com/php/image.png'; //change to your server's domain $data = json_decode(file_get_contents('http://api.rest7.com/v1/raster_to_vector.php?url=' . $url . '&format=svg')); if (@$data->success !== 1) { die('Failed'); } $vec = file_get_contents($data->file); file_put_contents('vectors.svg', $vec);