LIGデザイナー採用
LIGデザイナー採用
2012.03.15

PHPでGDを利用してサムネイルを作成する方法

小林

う〜サムネイル、サムネイル。

今PHPでの画像のサムネイル生成方法を求めて全力検索している僕はLIGに勤めるごく一般的なプログラマー。
強いて違うところをあげるとすればGDに興味があるってとこかナー

こういう画像を

こうしたいんです。

という訳で、今回はPHPでGDを利用してサムネイルを作成する方法です。

まず、対象となる画像をホイホイ設定します。

$image = imagecreatefromjpeg( $file );

$fileにはローカルファイルのパス、またはなんとURLを直接指定することも可能です。(PHPの環境設定次第なんですがね、へへへ)

$width  = imagesx( $image );
$height = imagesy( $image );
if ( $width >= $height ) {
    //横長の画像の時
    $side = $height;
    $x = floor( ( $width - $height ) / 2 );
    $y = 0;
    $width = $side;
} else {
    //縦長の画像の時
    $side = $width;
    $y = floor( ( $height - $width ) / 2 );
    $x = 0;
    $height = $side;
}

ホイホイ取得した画像の横幅と縦幅を比較して、短い方を基準にして一辺の長さを指定します。

長方形でも構わずリサイズしちまうんだぜ。

$thumbnail_width  = 100;
$thumbnail_height = 100;
$thumbnail = imagecreatetruecolor( $thumbnail_width, $thumbnail_height );

$thumbnail_width と $thumbnail_height にはサムネイルの幅と高さを指定して(上記の場合ですと100×100ピクセルですね、きっと)、imagecreatetruecolor()でサムネイル画像の入れ物的なものを生成します。

あぁ、次は保存だ。

imagecopyresized( $thumbnail, $image, 0, 0, $x, $y, $thumbnail_width, $thumbnail_height, $width, $height );
imagejpeg( $thumbnail, 保存先のファイルパス );

imagecopyresized() で入れ物的なものによしなに元画像が挿入されてしまうんですね。
で、imagejpeg()で好きな場所に保存すれば完成です。

すごく・・・正方形です・・・

世の中にごまんとある画像処理のライブラリを使いますともっとお気軽にできるんですが、
お手軽に処理するだけならこんなのでもいいかもしれませんね。

意外と簡単なんだな