2011-01-06 2 views
8

PHPでベクターグラフィックスを作成しようとしています。私はカイロを試みたし、それを働かせることはできなかった。 imageMagickにはベクター機能がありますが、php.netのドキュメントは非常に貧弱であることを理解しています。アイデアはEPSにグラフィックを保存できることです。私はまた、テキストを出力するために別のフォントを使用できるようにする必要があります。PHPでベクターグラフィックスを作成する

+0

EPSではなくPDFを使用することを検討しましたか? (一般的にPDFを作成するためのサポートが増えています。) –

+0

基本的には、Adobe Illustratorでファイルを編集する必要があります。 PDFで可能なことがわからないImは、カイロが使用しているもののSVGでそれをやってみるつもりですが、PHPラッパーについては、良い文書を見つけることができません。私はインストールするカイロを持っていますが、私はイメージを作成する方法を知らない。 PHPはちょうどthroughsエラーどこでも – jef2904

+0

あなたはPHPでsvgを作るためのラッパーは必要ありません。正しい 'header'を指定し、htmlのようにsvgを出力するだけです。 – zzzzBov

答えて

0
+0

私は両方のリンクを調べて、2番目のリンクはImagemagick&magickwandで望むことができないように見えます。推測して、カイロをもっと見てください。 – jef2904

+0

これは間違っていて、肯定的な答えを示すべきではありません。 Imagemagickはベクトル画像をラスタライズしますが、ラスタ画像はベクトル化しません。 – CommonKnowledge

+0

はいImagemagickはMVGを作成できます。 imagemagickがラスタをベクトル化できるとは書いていませんでした。あなたはどこからそれを選んだのですか?何でも...ロールレス... – Diablo

4

あなたは、私はまだPDFを作成することを目指すだろうEPSを作成するために探しているが。 PDF年代には、任意の主要なパッケージに完全に編集可能です:Adobe Illustratorの、コーレルドロー、シャーラプロなど

TCPDFがうまく機能し、フォントとベクトル画像EPSとAI出力のサポートを含むコードサンプルの束がPDFにあり

EPS/AI例http://www.tcpdf.org/examples/example_032.pdf

http://www.tcpdf.org/examples.php

2

私はこれはかなり古い問題が何であるかを知っているが、私は数週間前に、いくつかの問題を抱えていたし、自分のためにそれを解決するには、この答えは誰かに役立ちます願っていますすべての例と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 

[OK]を、我々は必要なフォントとSVGを持っているが、我々はEPSが必要です。 EPSにSVGを変換するために私は、単純な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)の最新バージョンをインストールします。インクスケープ。私はopenSuse 12.3でそれをテストしました。

2)すべてのカスタムフォントをシステムフォントにインストールします。

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); 
関連する問題