LXIII. イメージ関数(image)

導入

PHPができることは、HTML出力を生成することだけではありません。PHP は、多くの異なるイメージ形式でイメージファイルを作成したり、操作 したりすることもできます。このイメージ形式には、gif, png, jpg, wbmp, xpmが含まれます。さらに便利なことに、PHPはイメージストリー ムを直接ブラウザに出力することができます。 これを動作されるには、イメージ関数のGDライブラリを指定してPHPをコ ンパイル必要があります。使用したいイメージ形式によっては、GDとPHP は他のライブラリも必要とする可能性があります。

PHPのイメージ関数により JPEG GIF PNG SWF TIFF JPEG2000 イメージの 大きさを知ることができます。

exif 拡張モジュール を使用すると、 JPEG TIFF 画像のヘッダに保存された情報を扱うことができます。 これにより、デジタルカメラが作成したメタデータを読み込むことができます。 exif 関数は GD ライブラリを必要としません。

注意: イメージの読み込み、書き込み、修正の機能を拡張するには、 要求の節を呼んでください。 デジタルカメラで撮影した画像のメタデータを読み込むには、 上で説明した exif 拡張モジュール が必要です。

要件

GD ライブラリ( http://www.boutell.com/gd/ で取得可能)があれば、画像の作成と操 作を行なうこともできます。

操作できるイメージの形式は、インストールされている GD とこれらのイメージフォーマットにアクセスする ために GD が必要とするその他のライブラリに依存し ます。gd-1.6より前のバージョンのgdは、GIFイメージ画像をサポートし ていますが、PNGはサポートしていません。一方、gd-1.6以降でgd-2.0.28未満の バージョンはPNGをサポートし、GIFはサポートしていません。 GIFサポートは、gd-2.0.28で再度有効になりました。

注意: PHP 4.3以降、GD libの付属版が付属しています。この付属版にはαブ レンディングのようないくつかの機能が追加されています。 この版のコードは、より管理が行き届き、安定しているため、 外部ライブラリの代わりに使用されるべきです。

注意: PHP 6.0.0 では GD 1.x はサポートされなくなりました。 GD 2.0.33 以降が必要となります。

より多くのイメージ形式を処理するために GD を拡張したいと思うかもしれません。

表 1. サポートされるイメージ形式

イメージ形式 ダウンロードするライブラリ 注記
gif   gd-1.6より以前またはgd-2.0.28以降のバージョンのGDでのみサポートされます。 読み込みのみ のGIFサポートは、PHP 4.3.0 とバンドルされたGDライブラリの組合せで利用可能です。 書き込み のサポートは、PHP 4.3.9および PHP 5.0.1以降で利用可能です。
jpeg-6b ftp://ftp.uu.net/graphics/jpeg/  
png http://www.libpng.org/pub/png/libpng.html gd-1.6以降のバージョンのGDでのみサポートされます。
xpm ftp://metalab.unc.edu/pub/Linux/libs/X/!INDEX.html Xウインドウ環境をインストールしている場合、 このライブラリを既に利用可能と思われます。

別の種類のフォントを処理できるようにGDを拡張したいと思うかもしれ ません。以下にサポートされるフォントライブラリを示します。

表 2. サポートされるフォントライブラリ

フォントライブラリ ダウンロード 注記
FreeType 1.x http://www.freetype.org/ PHP 6.0.0 でサポートされなくなりました。
FreeType 2 http://www.freetype.org/  
T1lib ftp://sunsite.unc.edu/pub/Linux/libs/graphics/ ) Postscript Type 1 フォントをサポートします。

インストール手順

PHPでGDサポートを有効にするには、configure に --with-gd[=DIR] を指定します。ただし、DIRは GDのベースインストールディレクトリです。 PHPにバンドルされている推奨のGDライブラリを使用するには --with-gd を指定します。 GD ライブラリをコンパイルするには、 libpng libjpeg が必要です。

Windowsの場合、GD2 DLL php_gd2.dll php.ini に エクステンションとして指定してください。 GD1 DLL php_gd.dll はPHP4.3.2で削除されました。 imagecreatetruecolor() のようにTrueカラーが優先される関数 についてはGD2が必須です。

PHP3においてGDサポートを無効にするには --without-gd を指定してください。

より多くの画像フォーマットを扱えるようにGDの能力を高めるには、 --with-XXXX のような形のオプションを指定します。

表 3. サポートされる画像フォーマット

画像フォーマット configure オプション
jpeg-6b jpeg-6b をサポートするには --with-jpeg-dir=DIR を指定します。
png PNGをサポートするには --with-png-dir=DIR を指定します。ただし、libpngは zlibライブラリ を 必要とするため、 --with-zlib-dir[=DIR] もconfigureオプションに追加する必要があります。
xpm XPMをサポートするには --with-xpm-dir=DIR を指定します。必要なライブラリをconfigureが見つけられなかった場合は X11ライブラリのパスを追加してください。

注意: libpng と共に PHP をコンパイルする際、GD ライブラリとリンクされる同じバージョンを使用する必要があります。

GDがより多くのフォントを扱えるようにするには --with-XXXX のような形のオプションを指定します。

表 4. サポートされるフォントライブラリ

フォントライブラリ configure オプション
FreeType 1.x FreeType 1.x をサポートするには --with-ttf[=DIR] を指定します。
FreeType 2 FreeType 2 をサポートするには --with-freetype-dir=DIR を指定します。
T1lib T1lib (Postscript Type 1 フォント) をサポートするには --with-t1lib[=DIR] を指定します。
ネイティブ TrueType 文字列関数 ネイティブな TrueType 文字列関数 をサポートするには --enable-gd-native-ttf を指定します。

実行時設定

イメージ関数固有の設定項目はありませんが、 exif 拡張モジュール のディレクティブに興味を持つかも知れません。

リソース型

リソース型は定義されていません。

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

IMG_GIF ( integer )

IMG_JPG ( integer )

IMG_JPEG ( integer )

IMG_PNG ( integer )

IMG_WBMP ( integer )

IMG_XPM ( integer )

IMG_COLOR_TILED ( integer )

IMG_COLOR_STYLED ( integer )

IMG_COLOR_BRUSHED ( integer )

IMG_COLOR_STYLEDBRUSHED ( integer )

IMG_COLOR_TRANSPARENT ( integer )

IMG_ARC_ROUNDED ( integer )

IMG_ARC_PIE ( integer )

IMG_ARC_CHORD ( integer )

IMG_ARC_NOFILL ( integer )

IMG_ARC_EDGED ( integer )

IMAGETYPE_GIF ( integer )

IMAGETYPE_JPEG ( integer )

IMAGETYPE_PNG ( integer )

IMAGETYPE_SWF ( integer )

IMAGETYPE_PSD ( integer )

IMAGETYPE_BMP ( integer )

IMAGETYPE_WBMP ( integer )

IMAGETYPE_XBM ( integer )

IMAGETYPE_TIFF_II ( integer )

IMAGETYPE_TIFF_MM ( integer )

IMAGETYPE_IFF ( integer )

IMAGETYPE_JB2 ( integer )

IMAGETYPE_JPC ( integer )

IMAGETYPE_JP2 ( integer )

IMAGETYPE_JPX ( integer )

IMAGETYPE_SWC ( integer )

PNG_NO_FILTER ( integer )

PNG_FILTER_NONE ( integer )

PNG_FILTER_SUB ( integer )

PNG_FILTER_UP ( integer )

PNG_FILTER_AVG ( integer )

PNG_FILTER_PAETH ( integer )

PNG_ALL_FILTERS ( integer )

例 1. PHPによるPNGの生成

<?php

header
( "Content-type: image/png" );
$string = $_GET [ 'text' ];
$im      = imagecreatefrompng ( "images/button1.png" );
$orange = imagecolorallocate ( $im , 220 , 210 , 60 );
$px      = ( imagesx ( $im ) - 7.5 * strlen ( $string )) / 2 ;
imagestring ( $im , 3 , $px , 9 , $string , $orange );
imagepng ( $im );
imagedestroy ( $im );

?>
この例のスクリプトは、<img src="button.php?text"> のようなタグによりあるページからコールされるものです。 上のbutton.phpスクリプトは、この "text" 文字列を引数と し、この場合は "images/button1.png" である基本イメージ の最上部にこの文字列を描いた後、描画後ののイメージを出力します。 この方法は、ボタンのテキストを変更する度に新規のボタンを生成する 必要があるのを回避するために便利な手法です。 この方法により、動的にイメージボタンを生成できます。

目次
gd_info  -- 現在インストールされているGDライブラリに関する情報を取得する
getimagesize  -- 画像の大きさを取得する
image_type_to_extension  -- 画像形式からファイルの拡張子を取得する
image_type_to_mime_type  --  getimagesize, exif_read_data, exif_thumbnail, exif_imagetypeから返される 画像形式のMIMEタイプを取得する
image2wbmp  -- ブラウザまたはファイルにイメージを出力する
imagealphablending  -- イメージのブレンドモードを設定する
imageantialias  -- アンチエイリアス機能を使用すべきかどうかを判断する
imagearc  -- 部分楕円を描画する
imagechar  -- 水平に文字を描画する
imagecharup  -- 垂直に文字を描画する
imagecolorallocate  -- 画像で使用する色を作成する
imagecolorallocatealpha  -- 画像で使用する色を透過度を指定して作成する
imagecolorat  -- ピクセルの色のインデックスを取得する
imagecolorclosest  -- 指定した色に最も近い色のインデックスを取得する
imagecolorclosestalpha  -- 指定した色+アルファ値に最も近い色のインデックスを取得する
imagecolorclosesthwb  -- 指定した色に最も近い色合い、白、黒を有する色のインデックスを得る
imagecolordeallocate  -- イメージの色リソースを開放する
imagecolorexact  -- 指定した色のインデックスを取得する
imagecolorexactalpha  -- 指定した色+アルファ値のインデックスを取得する
imagecolormatch  -- パレットイメージの色を True カラーイメージに近づける
imagecolorresolve  -- 指定した色または出来るだけ近い色のインデックスを得る
imagecolorresolvealpha  -- 指定した色+アルファ値または最も近い色のインデックスを取得する
imagecolorset  -- 指定したパレットインデックスの色を設定する
imagecolorsforindex  -- カラーインデックスからカラーを取得する
imagecolorstotal  -- 画像パレットの色数を検出する
imagecolortransparent  -- 透明色を定義する
imageconvolution  -- div および offset の係数を使用し、3x3 の畳み込み配列を適用する
imagecopy  -- 画像の一部をコピーする
imagecopymerge  -- イメージの一部をコピー、マージする
imagecopymergegray  -- グレースケールでイメージの一部をコピー、マージする
imagecopyresampled  -- 再サンプリングを行いイメージの一部をコピー、伸縮する
imagecopyresized  -- 画像の一部をコピーしサイズを変更する
imagecreate  -- パレットを使用する新規画像を作成する
imagecreatefromgd2  -- GD2 ファイルまたは URL から新規イメージを生成する
imagecreatefromgd2part  -- GD2 ファイルまたは URL の指定した部分から新規イメージを生成する
imagecreatefromgd  -- GD ファイルまたは URL から新規イメージを生成する
imagecreatefromgif  -- ファイルまたは URL から新規画像を作成する
imagecreatefromjpeg  -- ファイル又は URL から新規 JPEG 画像を作成する
imagecreatefrompng  -- ファイルまたは URL から新規 PNG 画像を作成する
imagecreatefromstring  -- 文字列の中のイメージストリームから新規イメージを作成する
imagecreatefromwbmp  -- ファイルまたは URL から新規イメージを作成する
imagecreatefromxbm  -- ファイル又は URL から新規イメージを生成する
imagecreatefromxpm  -- ファイルまたは URL から新規イメージを生成する
imagecreatetruecolor  -- TrueColor イメージを新規に作成する
imagedashedline  -- 破線を描画する
imagedestroy  -- 画像を破棄する
imageellipse  -- 楕円を描画する
imagefill  -- 塗り潰す
imagefilledarc  -- 部分楕円を描画し、塗りつぶす
imagefilledellipse  -- 塗りつぶされた楕円を描画する
imagefilledpolygon  -- 塗りつぶした多角形を描画する
imagefilledrectangle  -- 塗りつぶした矩形を描画する
imagefilltoborder  -- 特定色で塗りつぶす
imagefilter  -- 画像にフィルタを適用する
imagefontheight  -- フォントの高さを取得する
imagefontwidth  -- フォントの幅を取得する
imageftbbox  -- freetype2 によるフォントを用いたテキストを囲む箱を取得する
imagefttext  -- FreeType 2 によるフォントを用いてイメージにテキストを描画する
imagegammacorrect  -- GD イメージにガンマ補正を適用する
imagegd2  -- GD2 イメージをブラウザまたはファイルに出力する
imagegd  -- GD イメージをブラウザまたはファイルに出力する
imagegif  -- ブラウザまたはファイルへ画像を出力する
imageinterlace  -- インターレースを有効もしくは無効にする
imageistruecolor  -- 画像が truecolor かどうか調べる
imagejpeg  -- 画像をブラウザまたはファイルに出力する
imagelayereffect  --  アルファブレンディングフラグを設定し、libgd にバンドルされている レイヤ効果を使用する
imageline  -- 直線を描画する
imageloadfont  -- 新しいフォントを読み込む
imagepalettecopy  -- あるイメージから他のイメージにパレットをコピーする
imagepng  -- PNG イメージをブラウザまたはファイルに出力する
imagepolygon  -- 多角形を描画する
imagepsbbox  --  PostScript Type1 フォントを用いてテキスト矩形のバウンディングボックス を指定する
imagepsencodefont  -- フォントの文字エンコードベクトルを変更する
imagepsextendfont  -- フォントを展開または圧縮する
imagepsfreefont  -- PostScript Type 1 フォント用メモリを解放する
imagepsloadfont  -- ファイルから PostScript Type 1 フォントをロードする
imagepsslantfont  -- フォントを傾ける
imagepstext  -- PostScript Type1 フォントを用いて画像の上に文字列を描く
imagerectangle  -- 矩形を描画する
imagerotate  -- 指定された角度で画像を回転する
imagesavealpha  --  PNG 画像を保存する際に(単一色の透過設定ではない)完全な アルファチャネル情報を保存するフラグを設定する
imagesetbrush  -- 線の描画用にブラシイメージを設定する
imagesetpixel  -- 点を生成する
imagesetstyle  -- 線描画用のスタイルを設定する
imagesetthickness  -- 線描画用の線幅を設定する
imagesettile  -- 塗りつぶし用のイメージを設定する
imagestring  -- 文字列を水平に描画する
imagestringup  -- 文字列を垂直に描画する
imagesx  -- 画像の幅を取得する
imagesy  -- 画像の高さを取得する
imagetruecolortopalette  -- TrueColor イメージをパレットイメージに変換する
imagettfbbox  -- TypeType フォントを使用したテキストの bounding box を生成する
imagettftext  -- TrueType フォントを使用してテキストを画像に書き込む
imagetypes  -- この PHP がサポートしている画像形式を返す
imagewbmp  -- ブラウザまたはファイルにイメージを出力する
imagexbm  -- XBM 画像をブラウザあるいはファイルに出力する
iptcembed  -- バイナリ IPTC データを JPEG イメージに埋めこむ
iptcparse  -- バイナリの IPTC ブロックのタグをパースする
jpeg2wbmp  -- JPEG イメージファイルから WBMP イメージファイルに変換する
png2wbmp  -- PNG イメージファイルから WBMP イメージファイルに変換する