我试图在PHP中创建矢量图形。我试过开罗,但是我无法让它开始工作。我明白imageMagick有矢量功能,但php.net上的文档非常差,有人可以引导我朝着正确的方向前进吗?这些想法是为了将图形保存到EPS。我还需要能够使用不同的字体来输出文本。
答案 0 :(得分:4)
虽然您希望创建eps,但我仍然希望创建一个PDF。 PDF可在任何主要包装中完全编辑:Adobe Illustrator,Corel Draw,Xara Pro等
TCPDF效果很好,有很多代码示例,包括字体和支持矢量图像eps和ai输出到PDF
eps / ai示例http://www.tcpdf.org/examples/example_032.pdf
所有示例和php代码http://www.tcpdf.org/examples.php
答案 1 :(得分:3)
我知道这是一个很老的问题,但几周前我遇到了一些问题并为自己解决了这个问题,希望这个答案可以帮助别人。 开罗库有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)将所有自定义字体安装到系统字体。
答案 2 :(得分:0)
试试这些链接:
http://www.imagemagick.org/script/magick-vector-graphics.php
和
http://www.imagemagick.org/discourse-server/viewtopic.php?f=10&t=10144
答案 3 :(得分:0)
我无法告诉你如何在PHP中创建矢量图像,但也许你想要一些不同的方法 - 在PHP中创建光栅图像并将它们转换为矢量?它适用于黑色和黑色白色图像不确定颜色。
<?php
$im = imagecreatetruecolor(500,500);
//draw something on $im
imagepng($im, 'image.png');
$url = 'http://server.com/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);