(有)PCA


山形市小白川町4丁目25-22
 TEL:023-615-0185
 FAX:023-615-0186

特定労働者派遣事業受理番号
特06−300152

有限会社ピーシーエー

FBバナー作成



Shince 2002/01/16

アドバイス情報 - webmasterさんのエントリ

2008/07/31
PHPからCairoを使う

執筆者: webmaster (12:12 pm)
皆さんは、PHPから直線や円弧を描いたり文字を描いたりしその結果を画像として出力したい場合やPDFを作成したい場合、どのような方法で処理を実現しますか?画像処理ライブラリであるGD、PDF作成ライブラリであるFPDFといったものを使ったりするのが一般的ではないでしょうか。しかし、今回はCairoと呼ばれる画像処理ライブラリを紹介したいと思います。

Cairoとは画像処理ライブラリの一種で、ベクターベース、クロスプラットフォーム、PDFやPNG、SVG等々様々なバックエンドをサポートしていて、その特徴からFirefoxの次期バージョンやGUIツールキットであるGTK+といったもので使われています。

このような特徴を持つCairoをPHPから使うために、cairo_wrapperという拡張モジュールがあります。この拡張モジュールを用いることによりPHPから容易にCairoを使用することが可能になります。

では、早速使ってみましょう。

pecl install cairo_wrapper-beta
上記コマンドでインストールすることが出来ます。インストール完了後、 cairo_wrapper.soを使用できるようにするためphp.ini等に設定を追加してください。

完了したら、以下のサンプルスクリプトを実行してください。

<?php
$surface = cairo_pdf_surface_create("sample.pdf", 605.0, 855.0);
$cr = cairo_create($surface);

cairo_set_source_rgb ($cr, 0.0, 0.0, 1.0);

cairo_move_to($cr, 150, 150);
cairo_select_font_face($cr ,"VL Gothic", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size($cr, 72);
cairo_show_text($cr, "PHPプロ!");
cairo_show_page($cr);

cairo_destroy($cr);
cairo_surface_destroy($surface);
?>

「PHPプロ!」と描かれたPDF、sample.pdfが作成されます。もし文字が正しく表示されていない場合は、上記サンプルスクリプトのcairo_select_font_faceに記述してある「VL Gothic」を環境に合ったフォント名に変更してください。

この他にも様々な機能があるのですが、先のサンプルスクリプトのcairo_show_text()の箇所をcairo_text_path()を使用して以下のように変更すると

cairo_text_path($cr, "PHPプロ!");
cairo_set_source_rgb($cr, 0.5, 0.5, 1);
cairo_fill_preserve($cr);
cairo_set_source_rgb($cr, 0, 0, 0);
cairo_set_line_width($cr, 5);
cairo_stroke($cr);

先ほどと微妙に違って、テキストからパスを作成して「こんにちは」という文字を黒の太い線で縁取りをし薄紫色で塗りつぶしています。いかがでしょうか、Cairoをこのような処理をいとも簡単に行うことが可能になります。

また、PDFではなくPNG形式の画像にしたいという場合は、下記サンプルスクリプトのようにcairo_pdf_surface_create()ではなくcairo_image_surface_create()と
cairo_surface_write_to_png()を使うことにより可能になります。

<?php
$surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 605.0, 855.0);
$cr = cairo_create($surface);

cairo_set_source_rgb ($cr, 0.0, 0.0, 1.0);

cairo_move_to($cr, 150, 150);
cairo_select_font_face($cr ,"VL Gothic", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size($cr, 72);
cairo_show_text($cr, "PHPプロ!");
cairo_show_page($cr);

cairo_destroy($cr);
cairo_surface_write_to_png($surface, "sample.png");
cairo_surface_destroy($surface);
?>

興味のある方は使ってみてはいかがでしょうか。





この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。
webmasterさんのブログを読む | コメント (0) | トラックバック数 (0) | 閲覧数 (3981)
このエントリのトラックバックURL
http://www.y-pca.jp/modules/weblog/weblog-tb.php/17
印刷用ページ 友達に送る
投稿された内容の著作権はコメントの投稿者に帰属します。