[PHP]画像のリサイズ・トリミング(class.image.php編)

アップロードした画像ファイルをリサイズ(拡大縮小)し、トリミング(切り出し)を行いたいとき、「class.image.php」を使用する方法があります。

今回は、アップロードしたファイルを100px×100pxの正方形に中央を基準にトリミングします。

下記ソースの流れはこんな感じです。
1.アップロードしたファイルをリネーム
2.既定フォルダに保存
3.ファイルの縮小
4.ファイルのトリミング

<?php
require_once 'class.image.php';
define('IMAGE_AREA_LENGTH', 100);    //画像(正方形)の1辺の長さ
$upload_path = $_SERVER['DOCUMENT_ROOT'].'/upload/';
if(!is_uploaded_file($_FILES['toProcess']['tmp_name'])){
die('アップロードエラー');
}
//アップロード成功
$tmp_name = $_FILES['toProcess']['tmp_name'];    //元画像ファイル
//ファイル名を取得
$file_name = date('YmdHis');    //YYYYMMDDHHIISSで名前を付ける
$file_name = uniqid($file_name.'_');    //重複しない名前
//拡張子を取得
$wrk = explode('.', $_FILES['toProcess']['name']);
$extension = array_pop($wrk);
//画像保存パス
$output_file = $upload_path.$file_name.'.'.$extension;
//画像を移動
move_uploaded_file($tmp_name, $output_file);
//リサイズ    (縦横の最大サイズを100ピクセル)
$size = GetImageSize($output_file);    //元画像サイズ取得
if($size[0] > $size[1]){
$height = IMAGE_AREA_LENGTH;
$width = $height * ($size[0] / $size[1]);
}else{
$width = IMAGE_AREA_LENGTH;
$height = $width * ($size[1] / $size[0]);
}
//画像オブジェクト生成
$thumb = new Image($output_file);
//リサイズ
$thumb->width($width);
$thumb->height($height);
$thumb->save();
//トリミング
$thumb->width(IMAGE_AREA_LENGTH);
$thumb->height(IMAGE_AREA_LENGTH);
if($width < $height){
$thumb->crop(0, ($height - $width) / 2);
}else{
$thumb->crop(($width - $height) / 2, 0);
}
$thumb->save();

「class.image.php」はリサイズとトリミングを分けて行うことによって動作させることができました。

ちょっとごちゃごちゃした感じになってしまいました。
他にも「Zebra_Image」を使うと少しコードがすっきりします。
それはまた次回に・・・。

※ご注意
掲載している内容についてはご自身の責任で参考にされてください。