PHP「GDライブラリ」の話@たなか

急にストレッチをして、筋違いしてませんか?

こんにちは、たなかです。


今日は、この間ちょっと訳ありで調べてみた「GDライブラリ」の話です。

PHPのライブラリと言えば「PEAR」が一番初めに頭に浮かぶと

思いますが、「GDライブラリ」は「PEAR」ではありません。

ちなみに、「PEAR」の正しい読み方は「ピア」ではなく「ペア」ですので、注意しましょう(^O^)/


と言う事で、これを機会に時々PHPライブラリネタをやることにします。

何故かと言うとライブラリネタだと数回のブログネタが稼げるライブラリは、とーっても便利だからです。

便利ですから、どんどん使って行きましょう(^O^)/


GDライブラリは、イメージ関数のライブラリとなっていますので

いろいろなイメージを操作する事が可能です。

で、どうやってインストールするの?って話なんですが

とーっても簡単でして

php.iniの

「extension=php_gd2.dll」を有効にするだけです。

有効にした後、サーバーを再起動して

php.infoを参照し、「gd」が有効になっていればOKです。


■参考
http://jp2.php.net/manual/ja/ref.image.php


それでは、サムネイルを作成してみます。

※テストで書いたソースなので汚いし簡易的ですけど(>_<)


【階層構造】

├ thumbnail_image(イメージフォルダ)
└ thumbnail.php


thumbnail.php


<?php
	
	if(!isset($myfile)){
		
		$myfile_tmp  = htmlspecialchars($_FILES["myfile"]["tmp_name"]);		
		$myfile_name = htmlspecialchars($_FILES["myfile"]["name"]);
		$myfile_size = htmlspecialchars($_FILES["myfile"]["size"]);
		$myfile_type = htmlspecialchars($_FILES["myfile"]["type"]);
	}
	
	if(empty($myfile_size)){
		
?>

<html>
<head>
<title>サムネイルテスト</title>
</head>
<body>
<form enctype="multipart/form-data" action="./thumbnail.php" method="post">
<p>
<input name="myfile" type="file" size="30">
</p>
<input type="submit" value="送 信">
<input name=reset type="reset" value="リセット">
</form>
</body>
</html>
<?php		
		
		
	}else{
		
		##アップした画像を移動するパス
		$img_path = "./thumbnail_image/".$myfile_name;
		
		##「thumbnail_image」フォルダに移動
		move_uploaded_file($myfile_tmp, $img_path);
		
		##サムネイル作成
		if(!$new_name = create_thumbnail($img_path)){
			
			$err = "ERR!!";
		}
		
		##元イメージ削除
		unlink($img_path);
		
?>
<html>
<head>
<title>サムネイル結果</title>
</head>
<body>
画像の名前:<?=$new_name?>
<br />
<img src="./thumbnail_image/<?=$new_name?>">
</body>
</html>	
<?php		
		
	}
	print($err);
	print("END");
	
	
	##関数
	
	/*** サムネイルを生成(jpg/gif)
	 * @param $img_path=画像パス
	 * @return サムネイルの名前or<false>
	 ***/
	
	function create_thumbnail($img_path){
		
		if(empty($img_path)){
			return false;
		}
		
		$strs = split("[.]", $img_path);
		$size = count($strs);
		
		$type = $strs[$size-1];
		
		if($type!="gif"&&$type!="jpg"){
			return false;
		}
		
		##最大幅100pxのサムネイル画像を作る
		$length = 100;
		$size = getImageSize($img_path);
		
		##縦幅より横幅が大きければ横幅を固定、縦幅が大きければ縦幅を固定
		if($size[0] >= $size[1]){
			$width = $length;
			$high = $size[1] * $length / $size[0];
		}else{
			$width = $size[0] * $length / $size[1];
			$high = $length;
		}
		
		##元画像を生成	
		switch($type){
			
			case "gif":
				$img_in = imagecreatefromgif($img_path);
				break;
			case "jpg":
				$img_in = imagecreatefromjpeg($img_path);
				break;
			default:
				return false;
		}
		
		
		##サイズ変更
		$img_out = ImageCreateTruecolor($width,$high);
		ImageCopyResampled($img_out,$img_in,0,0,0,0,$width,$high,$size[0],$size[1]);
		
		##頭に"t-"をつけてみた。
		$new_name = "t-".basename($img_path);
		
		##画像ファイルの書き出し
		switch($type){
			case "gif":
				imagegif($img_out,"./thumbnail_image/".$new_name);
				break;
			case "jpg":
				imagejpeg($img_out,"./thumbnail_image/".$new_name);
				break;
			default:
				return false;
		}
		
		##後始末(メモリ解放)
		ImageDestroy($img_in);
		ImageDestroy($img_out);
		
		return $new_name;
	}
	
?>

と、こーんな感じでしょうか。

画像をアップロードすると、サムネイルが生成されて表示される

といった、単純なサンプルソースとなっております。

簡易的にサムネイルを作りたいときなどの

参考にしていただければと、思います。

以上、たなかでした。