ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 7713


Ignore:
Timestamp:
Jul 15, 2008, 7:40:53 PM (14 years ago)
Author:
ebihara
Message:

#2819:webapp/lib/util/image.php にて定義されている resize_image() を、OpenPNE_Img::resize_img() と同等になるよう修正

File:
1 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE/branches/stable-2.12.x/webapp/lib/util/image.php

    r6630 r7713  
    107107}
    108108/**
    109  *画像をリサイズし、出力する。
    110  *@param $type 画像タイプ
    111  *@param $src_filename 変換元画像ファイル名
    112  *@param $dst_filename 変換先画像ファイル名
    113  *@param $original_width 変換元画像の画像幅
    114  *@param $original_height 変換元画像の画像高さ
    115  *@param $new_width 変換先画像の画像幅
    116  *@param $new_height 変換先画像の画像高さ
    117  */
    118 function resize_image( $type, $src_filename, $dst_filename, $original_width, $original_height, $new_width, $new_height)
     109 * 画像をリサイズし、出力する
     110 *
     111 * @param $type 画像タイプ
     112 * @param $src_filename 変換元画像ファイル名
     113 * @param $dst_filename 変換先画像ファイル名
     114 * @param $original_width 変換元画像の画像幅
     115 * @param $original_height 変換元画像の画像高さ
     116 * @param $new_width 変換先画像の画像幅
     117 * @param $new_height 変換先画像の画像高さ
     118 */
     119function resize_image($type, $src_filename, $dst_filename, $original_width, $original_height, $new_width, $new_height)
    119120{
    120121    $src_img = NULL;
     
    122123
    123124    switch ($type) {
    124         case IMAGETYPE_GIF:
    125             $src_img = imagecreatefromgif ( $src_filename );
    126             $transparentIndex = imagecolortransparent($src_img);
    127             //透過GIFの場合
    128             if($transparentIndex >= 0){
    129                 $dst_img = imagecreate ( $new_width, $new_height );
    130                 $transparentColor=imagecolorsforindex($src_img, $transparentIndex);
    131                 $transparent=imagecolorallocate($dst_img, $transparentColor['red'], $transparentColor['green'], $transparentColor['blue']);
    132                 imagecolortransparent($dst_img, $transparent);
    133                 imagecopyresized ($dst_img,$src_img,0,0,0,0,$new_width,$new_height,$original_width,$original_height);
    134             }
    135             //透過GIFで無い場合
    136             else{
    137                 $dst_img = imagecreatetruecolor( $new_width, $new_height );
    138                 imagecopyresampled ($dst_img,$src_img,0,0,0,0,$new_width,$new_height,$original_width,$original_height);
    139                 imagetruecolortopalette($dst_img, true, 256);
    140             }
    141             imagegif ( $dst_img, $dst_filename );
    142             break;
    143         case IMAGETYPE_JPEG:
    144                $src_img = imagecreatefromjpeg ( $src_filename );
    145             $dst_img = imagecreatetruecolor ( $new_width, $new_height );
    146             imagecopyresampled ($dst_img,$src_img,0,0,0,0,$new_width,$new_height,$original_width,$original_height);
    147             imagejpeg ( $dst_img, $dst_filename );
    148             break;
    149         case IMAGETYPE_PNG:
    150             $src_img = imagecreatefrompng ( $src_filename );
    151             //TrueColor PNGの場合
    152             if(imageistruecolor($src_img)) {
    153                 $dst_img = imagecreatetruecolor ( $new_width, $new_height );
    154                 imagealphablending($dst_img, false);
    155                 imagecopyresampled ($dst_img,$src_img,0,0,0,0,$new_width,$new_height,$original_width,$original_height);
    156                 imagesavealpha($dst_img, true);
    157             }
    158             //TrueColor PNGで無い場合
    159             else{
    160                 //透過PNGの場合
    161                 if($transparentIndex >= 0){
    162                     $dst_img = imagecreate ( $new_width, $new_height);
    163                     $transparentColor=imagecolorsforindex($src_img, $transparentIndex);
    164                     $transparent=imagecolorallocate($dst_img, $transparentColor['red'], $transparentColor['green'], $transparentColor['blue']);
    165                     imagecolortransparent($dst_img, $transparent);
    166                     imagecopyresized ($dst_img,$src_img,0,0,0,0,$new_width,$new_height,$original_width,$original_height);
    167                 }
    168                 //透過PNGで無い場合
    169                     else{
    170                         $dst_img = imagecreatetruecolor( $new_width, $new_height );
    171                     imagecopyresampled ($dst_img,$src_img,0,0,0,0,$new_width,$new_height,$original_width,$original_height);
    172                     imagetruecolortopalette($dst_img, true, 256);
    173                 }
    174             }
    175             imagepng($dst_img, $dst_filename);
    176             break;
    177         default:
    178             break;
    179 
    180     }
     125    case IMAGETYPE_GIF:
     126        $src_img = imagecreatefromgif($src_filename);
     127        $dst_img = imagecreate($new_width, $new_height);
     128        set_transparent_to_output_image($src_img, $dst_img, $type);
     129        imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);
     130        imagegif($dst_img, $dst_filename);
     131        break;
     132    case IMAGETYPE_JPEG:
     133        $src_img = imagecreatefromjpeg($src_filename);
     134        $dst_img = imagecreatetruecolor($new_width, $new_height);
     135        imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);
     136        imagejpeg($dst_img, $dst_filename);
     137        break;
     138    case IMAGETYPE_PNG:
     139        $src_img = imagecreatefrompng($src_filename);
     140        $dst_img = imagecreate($new_width, $new_height);
     141        set_transparent_to_output_image($src_img, $dst_img, $type);
     142        imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);
     143        imagepng($dst_img, $dst_filename);
     144        break;
     145    default:
     146        break;
     147    }
     148
    181149    //リリースを解放
    182150    imagedestroy($dst_img);
    183151    imagedestroy($src_img);
     152}
     153
     154/**
     155 * 入力画像から取得した透過情報を出力画像に適用する
     156 *
     157 * @params resource $source_gdimg
     158 * @params resource $output_gdimg
     159 * @params int $type
     160 */
     161function set_transparent_to_output_image(&$source_gdimg, &$output_gdimg, $type)
     162{
     163    $trnprt_idx_s = imagecolortransparent($source_gdimg);
     164    if ($trnprt_idx_s >= 0) { // 透過色が設定されている
     165        // 入力画像から透明色に指定してある色(RGBの配列)を取得する
     166        $trnprt_color = imagecolorsforindex($source_gdimg, $trnprt_idx_s);
     167
     168        // 色の設定
     169        $trnprt_idx_s = imagecolorallocate($output_gdimg, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
     170
     171        // 透明色(にする色)で塗りつぶす
     172        imagefill($output_gdimg, 0, 0, $trnprt_idx_s);
     173
     174        // 透明色設定
     175        imagecolortransparent($output_gdimg, $trnprt_idx_s);
     176    } elseif ($type == IMAGETYPE_PNG) {  // PNG-24
     177        // アルファチャンネル情報を保存するには、アルファブレンディングを解除する必要がある
     178        imagealphablending($output_gdimg, false);
     179        imagesavealpha($output_gdimg, true);
     180
     181        // 透過色設定
     182        $color = imagecolorallocatealpha($output_gdimg, 0, 0, 0, 127);
     183        imagefill($output_gdimg, 0, 0, $color);
     184    }
    184185}
    185186
Note: See TracChangeset for help on using the changeset viewer.