PHPでベクターグラフィックスを作成しようとしています。私はカイロを試しましたが、うまくいきませんでした。imageMagick にはベクター機能があることは理解していますが、php.net のドキュメントは非常に貧弱で、誰かが私を正しい方向に導くことができますか? アイデアは、グラフィックを EPS に保存できるようにすることです。また、さまざまなフォントを使用してテキストを出力できるようにする必要もあります。
4 に答える
あなたは eps を作成しようとしていますが、私はまだ PDF を作成することを目指しています。PDF は、Adobe Illustrator、Corel Draw、Xara Pro などの主要なパッケージで完全に編集可能です。
TCPDF はうまく機能し、フォントやベクター画像 eps および PDF への ai 出力のサポートを含む多数のコード サンプルがあります。
eps/ai の例http://www.tcpdf.org/examples/example_032.pdf
すべての例と php コードhttp://www.tcpdf.org/examples.php
これがかなり古い質問であることは知っていますが、数週間前にいくつかの問題があり、自分で解決しました。この回答が誰かの役に立てば幸いです。Cairo ライブラリには PHP バインディングがありますが、フォーマット間の変換を中断するバグもほとんどありません。忘れてください。開始時にここにネイティブなものが必要です。SVG 形式を見てください。ベクター画像をエディター (私は Inkscape を使用) で開き、SVG ファイルとして保存します。その後、xml ファイルと同じように php 経由で変更できます。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 に変換するために、単純な bash スクリプト svg2eps.sh で Inkscape を使用しました。
#!/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://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);