LXII. イメージ関数(image)

導入

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

PHPのイメージ関数により JPEGGIFPNGSWFTIFFJPEG2000イメージの 大きさを知ることができます。

exif 拡張モジュール を使用すると、 JPEGTIFF 画像のヘッダに保存された情報を扱うことができます。 これにより、デジタルカメラが作成したメタデータを読み込むことができます。 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-6bftp://ftp.uu.net/graphics/jpeg/ 
pnghttp://www.libpng.org/pub/png/libpng.html gd-1.6以降のバージョンのGDでのみサポートされます。
xpmftp://metalab.unc.edu/pub/Linux/libs/X/!INDEX.html Xウインドウ環境をインストールしている場合、 このライブラリを既に利用可能と思われます。

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

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

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

インストール手順

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

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

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

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

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

画像フォーマットconfigure オプション
jpeg-6b To enable support for jpeg-6b add --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)

例 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 -- イメージをblendingモードに設定する
imageantialias --  アンチエイリアス機能を使用すべきかどうかを判断する
imagearc -- 部分楕円の描画
imagechar -- 水平に文字を描画
imagecharup -- 垂直に文字を描画
imagecolorallocate -- 画像で使用する色を作成する
imagecolorallocatealpha -- 画像で使用する色を透過度を指定して作成する
imagecolorat -- ピクセルの色のインデックスを取得
imagecolorclosest --  指定した色に最も近い色のインデックスを取得する
imagecolorclosestalpha --  指定した色+アルファ値に最も近い色のIDを取得
imagecolorclosesthwb --  指定した色に最も近い色合い、白、黒を有する色のインデックスを得る
imagecolordeallocate --  イメージの色リソースを開放する
imagecolorexact -- 指定した色のインデックスを取得する
imagecolorexactalpha -- 指定した色+アルファ値のIDを取得
imagecolormatch --  パレットイメージの色をTrueカラーイメージに近づける
imagecolorresolve --  指定した色または出来るだけ近い色のインデックスを得る
imagecolorresolvealpha --  指定した色+アルファ値または最も近い色のIDを取得する
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 -- 画像がtrueカラーかどうか調べる
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 http://www.iptc.org/ ブロックを パースする
jpeg2wbmp --  JPEGイメージファイルからWBMPイメージファイルに変換する
png2wbmp --  PNGイメージファイルからWBMPイメージファイルに変換する