用PHP创建矢量图形

用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

我正在尝试用PHP创建矢量图形。我试过开罗,但没能成功。我知道imageMagick具有矢量功能,但php.net上的文档非常差。有人能给我指明正确的方向吗?想法是能够将图形保存到EPS。我还需要能够使用不同的字体来输出文本。

尝试以下链接:


尽管您希望创建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);