サムネール画像を手軽に作れるPHPクラスを作ってみた。

ひょんなことから、1枚の画像から複数のサムネール画像を作る必要があったので、専用のクラス「XImageThumbnailer」を作ってみました。 よろしければ使ってみてください。

どんなプログラム?

1枚の画像ファイルから、さまざまなサイズでサムネール画像を手軽に作成してくれる便利なプログラム(正確にはPHPクラス)です。

XImageThumbnailerの仕様

  • JPEG, PNG, GIFファイルの読み込み・書き出しに対応※1
  • サムネール書き出し先を任意に指定できる※2
  • 元画像とサムネール画像のフォーマットを切り替えできる
  • サイズ指定が可能(ピクセル指定、パーセント指定に対応)
  • 元画像とサムネール画像のサイズ比率が合わなければ自動でクロップ(上下左右カット)
  • サムネール画像サイズは複数指定が可能
  • サムネール画像のファイル名に連番指定や高さ・幅指定などの特殊文字を利用可能
  • PHP4, PHP5 の両方に対応
注意点
※1 GIFファイルの書き出しには、GDライブラリでGIFの書き出しがサポートされている必要があります。
※2 書き出し先のフォルダは事前に作成し、適切なパーミッションを設定してください。

準備

ファイルをダウンロードして、適当なフォルダに置いてrequire_once()でもすれば準備完了です。簡単。
ファイルのダウンロードはページ下部のリンクから行ってください。

require_once('/path/to/XImageThumbnailer.php');

実行

次にクラスインスタンスを作成してオプションを指定し、create()するだけです。

以下の例はimg.jpgをPNG形式で400 x 200ピクセル, 幅50% x 高さ25%ピクセルのサムネール画像を作成しています。

$option = array(
    "src"    => "/path/to/img.jpg",
    "format" => "png",
    "size"   => array(array(400, 200), array("50%", "25%"))
);
$thumnailer = new XImageThumbnailer();
$noerr = $thumnailer->create($option);
print ($noerr) ? "サムネール画像の作成が完了しました。" : "サムネール画像の作成に失敗しました。";

オプション指定

XImageThumbnailerでは、いろいろとオプション指定ができます。

src (必須)
サムネール生成元画像ファイルへのパス。
dest
サムネール画像保存先フォルダパス。 未指定の場合は元画像と同じフォルダ(srcで指定してあるパス)に保存されます。
format
サムネール画像フォーマット。 未指定の場合はjpgになります。
name
サムネール画像ファイル名。 文字列の中に次のような特殊文字を指定することができます。
#f(ファイル名), #w(幅), #h(高さ), #e(拡張子))
未指定では「#f_#w_#h.#e」になります。
size
サムネール寸法。 幅と高さを指定した配列を1つ、または複数指定できます。 指定はピクセル指定(100, 200など)とパーセント指定(”50%”, “20%”など)が可能です。 未指定では”50%”が設定されます。 また、元画像と比率が合わない場合は自動的に余分なピクセルがクロップされます。
quality
サムネール画像品質(JPEG画像作成時に指定します)。 未指定では80になります。

ご利用にあたって

「XImageThumbnailer」のご利用については、商用・非商用に限らず自由にご利用いただけます。

また当プログラムの利用にあたって発生したいかなる損害についても、当方は一切責任を負いかねますので、ご利用にあたってはオプションパラメーターのサニタイジング(無害化)等、自己責任で行っていただけますよう、よろしくお願い致します。

ダウンロード

上記の「ご利用にあたって」をお読みいただき、同意していただける場合は以下のダウンロードリンクよりダウンロードしてお使いください。

XImageThumbnailerのダウンロード Creative Commons License

このページをシェアする

2 件のコメント

  • まっしろ より:

    はじめまして.便利なプログラムで感謝しております.
    不具合報告を致します.

    プログラム内に使用されている定数
    IMG_GIF・IMG_JPG・IMG_PNG
    はそれぞれ10進数で
    1・2・4
    を返します.
    しかし,getimagesizeでの返却値は
    IMAGETYPE_GIF・IMAGETYPE_JPEG・IMAGETYPE_PNG
    です.
    これはそれぞれ10進数で
    1・2・3
    を返します.

    たまたまGIFとJPGは一致しているのですがPNGのみ異なっており,プログラム71行目でPNGファイルが画像ファイル外としてはねられてしまいます.

    プログラム内の変数をそれぞれ正しく置換したらPNGファイルでも正しく動作しました.
    IMG_GIF→IMAGETYPE_GIF
    IMG_JPG→IMAGETYPE_JPEG
    IMG_PNG→IMAGETYPE_PNG

    ご確認いただければと思います.

    • まっしろさま、コメントいただきありがとうございます!
      おっしゃる通り、バグですね。さっそく修正させていただきました。
      ご指摘いただき、感謝致します!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

2010-03-19