PR

皆さんは、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.0855.0);
$cr cairo_create($surface);

cairo_set_source_rgb ($cr0.00.01.0);

cairo_move_to($cr150150);
cairo_select_font_face($cr ,"VL Gothic"CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size($cr72);
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_ARGB32605.0855.0);
$cr cairo_create($surface);

cairo_set_source_rgb ($cr0.00.01.0);

cairo_move_to($cr150150);
cairo_select_font_face($cr ,"VL Gothic"CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size($cr72);
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開発者をサポートする情報を掲載しています。