[PHP]サムネイル
同僚のハリネズミに依頼されてたような気がするのでアップしてみた。
>>ハリネズミ
CFシリーズに入れたょ。
#*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
# saveImageFile
# [説明]
# イメージファイルのローカル保存、もしくはイメージ出力
# [パラメータ]
# $pImageUri[I] string
# ⇒イメージファイルのURI(http://形式でも、物理パスでも可)
# $pSaveFileName[I] string
# ⇒保存ファイルのファイルパス
# ※pSaveFileがtrueの場合に有効
# $pMaxWidth[I] integer
# ⇒保存時の最大の横幅( 0を指定するとそのままで、1以上の正数値を指定するとサムネイル可します。)
# $pDegrees[I] integer
# ⇒回転角度。確か時計回りで何度回転するかを指定
# $pSaveFile[I] boolean
# ⇒ファイルを保存するか否か、falseを指定するとそのままレスポンスとしてイメージ出力します。
# [返り値] mixed
# ⇒TRUE: 処理成功
# TRUE以外: 処理失敗
#*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
function saveImageFile(
$pImageUri
, $pSaveFileName
, $pMaxWidth = 0
, $pDegrees = 0
, $pSaveFile = TRUE
){
$returnValue = FALSE;
$rsImage = FALSE;
$rsRotate = FALSE;
$rsNewImage = FALSE;
if( !extension_loaded('gd') && !extension_loaded('gd2') ){
# 拡張モジュールのロードに失敗
return $returnValue;
}
# サイズ情報の取得
list( $imageWidth, $imageHeight, $imageType ) = @getimagesize( $pImageUri );
#-----------------------------------------------------------
# イメージファイルの読み込み
switch( $imageType ){
case IMAGETYPE_GIF:
$rsImage = @imagecreatefromgif( $pImageUri );
break;
case IMAGETYPE_JPEG:
$rsImage = @imagecreatefromjpeg( $pImageUri );
break;
case IMAGETYPE_PNG:
$rsImage = @imagecreatefrompng( $pImageUri );
break;
}
#-----------------------------------------------------------
# イメージの回転
if( $rsImage !== FALSE ){
$rsRotate = @imagerotate( $rsImage, 360-$pDegrees, 0) ;
}
#-----------------------------------------------------------
# リサイズイメージの作成
if( $rsRotate !== FALSE ){
# 回転後のイメージサイズの取得
$imageWidth = ImageSX($rsRotate);
$imageHeight = ImageSY($rsRotate);
# リサイズ後のサイズを算出
if( $pMaxWidth == 0 or $imageWidth <= $pMaxWidth ){
# そのまま
$newWidth = $imageWidth;
$newHeight = $imageHeight;
}else{
# 最大サイズより大きい場合 => 縮小
$newHeight = intval(( (float)$pMaxWidth / (float)$imageWidth ) * (float)$imageHeight);
$newWidth = $pMaxWidth;
}
# 空画像を作成
if( function_exists("imagecreatetruecolor") ){
$rsNewImage = @imagecreatetruecolor( $newWidth, $newHeight );
}else{
$rsNewImage = @imagecreate( $newWidth, $newHeight );
}
# サンプリングしなおす
if( function_exists("imagecopyresampled") ){
$returnValue = @imagecopyresampled( $rsNewImage, $rsRotate, 0, 0, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight );
if( $returnValue === FALSE ){
$returnValue = @imagecopyresized( $rsNewImage, $rsRotate, 0, 0, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight );
}
}else{
$returnValue = @imagecopyresized( $rsNewImage, $rsRotate, 0, 0, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight );
}
}
if( $pSaveFile ){
#-----------------------------------------------------------
# イメージファイルの保存
if( $returnValue !== FALSE && $rsNewImage !== FALSE ){
switch( $imageType ){
case IMAGETYPE_GIF:
$returnValue = @imagegif( $rsNewImage, $pSaveFileName );
break;
case IMAGETYPE_JPEG:
$returnValue = @imagejpeg( $rsNewImage, $pSaveFileName, 100 );
break;
case IMAGETYPE_PNG:
$returnValue = @imagepng( $rsNewImage, $pSaveFileName );
break;
}
}
}else{
#-----------------------------------------------------------
# イメージファイルの表示
if( $returnValue !== FALSE && $rsNewImage !== FALSE ){
switch( $imageType ){
case IMAGETYPE_GIF:
header("Content-type: image/gif");
$returnValue = @imagegif( $rsNewImage );
break;
case IMAGETYPE_JPEG:
header("Content-type: image/jpeg");
$returnValue = @imagejpeg( $rsNewImage, "", 100 );
break;
case IMAGETYPE_PNG:
header("Content-type: image/png");
$returnValue = @imagepng( $rsNewImage );
break;
}
}
}
#-----------------------------------------------------------
# リソースの解放
@imagedestroy($rsImage);
@imagedestroy($rsRotate);
@imagedestroy($rsNewImage);
return $returnValue;
}