PHPでGDライブラリを使ってサムネイル画像を作ってみた

今日は、PHPでGDライブラリを使って画像を縮小、サムネイル化してみました。

数年前にうさちゃんねる掲示板で投稿された画像をまとめて表示するというコンテンツを作成していたんですが、coresreverからsixcoreへ移転した時からか、動かなくなったまま放置していたコンテンツを復活させました。

スマホ、PCのみならそのままでも表示できるんですが、ガラケ―ユーザーさんから画像が投稿されたスレッドに入れない!と報告がありました。

ガラケ―だとスクリプト側で縮小してあげないとそのままHTMLやCSSで縮小表示していると見れないみたいです。

そこでこういった画像コンテンツを作る場合、スクリプト側で縮小しなければならなくなりました;

あと、スマホユーザーさんも無駄に容量を食わなくて済み読み込みも早くなるといいことづくめです。

jpg、png、gifにも対応してサイズ、画像タイプは配列で取得しました。

<?php
//WebブラウザへJPEGで出力
header(‘Content-type: image/jpeg’);

$url = ”画像URL”;

list($width, $height, $type, $attr) = getimagesize(“$url”);

if($type == IMAGETYPE_GIF or $type == IMAGETYPE_JPEG or $type == IMAGETYPE_PNG){

//サイズによって圧縮率を変える

if($width > 1500 or $height > 1500){
$size = “5”;
}elseif($width > 1000 or $height > 1000){
$size = “4”;
}elseif($width > 500 or $height > 500){
$size = “3”;
}else{
$size = “2”;
}

switch($type) {
case IMAGETYPE_JPEG:
$img = imagecreatefromjpeg($url);
break;
case IMAGETYPE_PNG:
$img = imagecreatefrompng($url);
break;
case IMAGETYPE_GIF:
$img = imagecreatefromgif($url);
break;
}

$out = ImageCreateTrueColor($width/$size, $height/$size);
ImageCopyResampled($out, $img,0,0,0,0, $width/$size, $height/$size, $width, $height);

//jpgで出力
ImageJPEG($out);

// メモリを開放する
imagedestroy($out);
imagedestroy($img);

}

?>

list($width, $height, $type, $attr) = getimagesize(“$url”);

で取得した$typeですが、今回は3つしか使わなかったものの以下のように様々な返り値があります。

左の文字列と、右の数字が返ってきます。

IMAGETYPE定数

IMAGETYPE定数を紹介します。

IMAGETYPE_GIF 1
IMAGETYPE_JPEG 2
IMAGETYPE_PNG 3
IMAGETYPE_SWF 4
IMAGETYPE_PSD 5
IMAGETYPE_BMP 6
IMAGETYPE_TIFF_II 7
IMAGETYPE_TIFF_MM 8
IMAGETYPE_JPC 9
IMAGETYPE_JP2 10
IMAGETYPE_JPX 11
IMAGETYPE_JB2 12
IMAGETYPE_SWC 13
IMAGETYPE_IFF 14
IMAGETYPE_WBMP 15
IMAGETYPE_JPEG2000 9
IMAGETYPE_XBM 16

このように、表示に困らない程度ザクッと縮小して

例えば表示する際にはCSSを使って幅300ぐらいのサムネイルに統一して高さはautoとしておけば、さまざまな画像形式をそこそこ無劣化で表示することができました。

画像はこのブログではモザイク付きですw載せたくないので、直接見てくださいw

うさちゃんねる画像まとめ

今回は縮小だけでしたが、GDライブラリには他にも様々な関数が用意されていました。

ぜひ皆さんもやってみてはいかがでしょうか

GD および Image 関数

シェアする

  • このエントリーをはてなブックマークに追加

フォローする