higehikiのブログ

iPhoneアプリ「ログ雀」の中の人です。

GDでサムネイル作成してみた

ImageMagicは苦手なのでGDでやってみる。

GD インストール

- package install
# yum install gd gd-devel php-gd
# yum install perl-GD

- 設定確認
# vim /etc/php.d/gd.ini
extension=gd.so と記載されていればOK

- 適用
# apachectl graceful

- 確認
$ vim sample.php
<?php
	var_dump(gd_info());

以下のように出力されました

array(12) { ["GD Version"]=> string(26) "bundled (2.1.0 compatible)" ["FreeType Support"]=> bool(true) ["FreeType Linkage"]=> string(13) "with freetype" ["T1Lib Support"]=> bool(true) ["GIF Read Support"]=> bool(true) ["GIF Create Support"]=> bool(true) ["JPEG Support"]=> bool(true) ["PNG Support"]=> bool(true) ["WBMP Support"]=> bool(true) ["XPM Support"]=> bool(true) ["XBM Support"]=> bool(true) ["JIS-mapped Japanese Font Support"]=> bool(false) }

参考: http://d.hatena.ne.jp/yun_kichi/20110309/1299663104


続いてサムネイル作成のための簡易メソッド。

/**
 * createThumbnailImg
 * サムネイル生成 (GD利用)
 * @param char $path ファイルPATH
 * @param char $file ファイル名(拡張子抜き)
 * @param char $kind 種別
 * @param char $extension 拡張子
 * @retrun boolean
 */
static function createThumbnailImg($path, $file, $kind, $extension)
{
	// ファイル種別毎でbinary読み込み
	switch ($extension) {
		case "gif":
			$image = ImageCreateFromGIF($path);
			break;
		case "png":
			$image = ImageCreateFromPNG($path);
			break;
		default :
			$image = ImageCreateFromJPEG($path);
			break;
	}

	// 画像のサイズを取得
	$width  = ImageSX($image); //横幅(ピクセル)
	$height = ImageSY($image); //縦幅(ピクセル)

	// 縮小した画像のサイズを決める
	$new_width = 150;
	$rate = $new_width / $width; //圧縮比
	$new_height = $rate * $height;

	// 空の画像を作成する
	$new_image = ImageCreateTrueColor($new_width, $new_height);

	// 画像を普通にリサイズコピーする
	ImageCopyResized($new_image,$image,0,0,0,0,$new_width,$new_height,$width,$height);

	// 生成するサムネイル画像のPATHを決定する
	$thumb_path = Config::get('userimg_rootpath').Config::get('upload_dir_'.$kind)."/".'thumb_'.$file;

	// サムネイル画像を保存する
	switch ($extension) {
		case "gif":
			$ret = ImageGIF($new_image, $thumb_path);
			break;
		case "png":
			$ret = ImagePNG($new_image, $thumb_path);
			break;
		default :
			$ret = ImageJPEG($new_image, $thumb_path, 80);
			break;
	}

	return $ret;
}

参考: http://ameblo.jp/ringopanda/entry-10214437398.html