用PHP创建矢量图形
我正在尝试用PHP创建矢量图形。我试过开罗,但没能成功。我知道imageMagick具有矢量功能,但php.net上的文档非常差。有人能给我指明正确的方向吗?想法是能够将图形保存到EPS。我还需要能够使用不同的字体来输出文本。尝试以下链接: 及用PHP创建矢量图形,php,vector,imagemagick,eps,Php,Vector,Imagemagick,Eps,我正在尝试用PHP创建矢量图形。我试过开罗,但没能成功。我知道imageMagick具有矢量功能,但php.net上的文档非常差。有人能给我指明正确的方向吗?想法是能够将图形保存到EPS。我还需要能够使用不同的字体来输出文本。尝试以下链接: 及 尽管您希望创建eps,但我仍然希望创建PDF。PDF在任何主要软件包中都可以完全编辑:Adobe Illustrator、Corel Draw、Xara Pro等 TCPDF运行良好,有一系列代码示例,包括字体和对矢量图像的支持eps和ai输出到PDF
尽管您希望创建eps,但我仍然希望创建PDF。PDF在任何主要软件包中都可以完全编辑:Adobe Illustrator、Corel Draw、Xara Pro等 TCPDF运行良好,有一系列代码示例,包括字体和对矢量图像的支持eps和ai输出到PDF eps/ai示例
所有的例子和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
您可以从php调用它:
exec('/path/to/svg2eps.sh /path/to/in.svg path/to/out.eps');
其他提示:
1) 安装最新版本的Inkscape。我在openSuse 12.3上测试了它-效果很好
2) 将所有自定义字体安装到系统字体。我无法告诉您如何在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);
您是否考虑过使用PDF而不是EPS?(创建PDF通常有更多的支持。)不,文件基本上需要通过Adobe Illustrator进行编辑。不确定PDF是否可以这样做。我将研究如何使用SVG,这正是Cairo所使用的,但是我在PHP包装器上找不到很好的文档。我安装了Cairo,但我不知道如何开始创建映像。PHP在任何地方都能处理错误,您不需要包装器就可以使用PHP制作svg。您只需指定正确的标题
,然后像使用html一样打印svg。问题是,我不想将其输出到浏览器,我想将其保存为EPS文件。好的,我查看了两个链接,第二个链接似乎无法使用Imagemagick和magickwand实现我想要的功能。我猜我会放弃这一点,更多地调查cairoThis是不正确的,不应该有一个肯定的答案。Imagemagick可以栅格化矢量图像,但不能矢量化栅格图像。是的,Imagemagick可以创建MVG。我从来没有写过imagemagick可以矢量化光栅。你从哪里选的?不管怎样,滚翻眼睛。。。
<?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);