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

Changeset 6957


Ignore:
Timestamp:
May 4, 2008, 9:06:28 AM (12 years ago)
Author:
ebihara
Message:

Template Method パターンを適用し、GD依存の処理をOpenPNE_Img_Generator_GDに移動

Location:
OpenPNE/branches/work/ebihara/prj_renew_OpenPNE_Img/webapp/lib/OpenPNE/Img
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE/branches/work/ebihara/prj_renew_OpenPNE_Img/webapp/lib/OpenPNE/Img/Generator.php

    r6955 r6957  
    7171        }
    7272
    73         // create a GD image from raw_img
    74         if (!$source_gdimg  = imagecreatefromstring($raw_img)) {
    75             return false;
    76         }
    77 
    78         if ($this->getOutputFormat() == 'jpg') {
    79             // JPEGの場合、携帯対応
    80             imageinterlace($source_gdimg, 0);
    81         }
    82 
    83         // リサイズ
    84         $output_img = $this->resizeImage($source_gdimg);
     73        $output_img = $this->resizeImage($raw_img);
    8574
    8675        // キャッシュを生成
     
    9887     * GDイメージのリサイズ+形式変換
    9988     *
    100      * @param resource $gdimg source GD image
     89     * @param resource $raw_img
    10190     * @return resource output GD image
    10291     */
    103     function resizeImage($source_gdimg)
    104     {
    105         $s_width  = imagesx($source_gdimg);
    106         $s_height = imagesy($source_gdimg);
    107 
    108         $o_width  = $this->width;
    109         $o_height = $this->height;
    110         if (!$o_width) {
    111             $o_width = $s_width;
    112         }
    113         if (!$o_height) {
    114             $o_height = $s_height;
    115         }
    116 
    117         $this->calcResizedImageSize($o_width, $o_height, $s_width, $s_height);
    118 
    119         if (!$this->isResizeImage($o_width, $o_height, $s_width, $s_height)) {
    120             if ($this->isConvertFormat()) {
    121                 return $source_gdimg;
    122             }
    123             return false;
    124         }
    125 
    126         $output_gdimg = imagecreatetruecolor($o_width, $o_height);
    127         $this->setTransparentToOutputImage($output_gdimg, $source_gdimg);
    128         imagecopyresampled($output_gdimg, $source_gdimg,
    129                 0, 0, 0, 0, $o_width, $o_height, $s_width, $s_height);
    130 
    131         return $output_gdimg;
     92    function resizeImage($raw_img)
     93    {
     94        return $raw_img;
    13295    }
    13396
     
    390353        }
    391354    }
    392 
    393     /**
    394      * 入力画像から取得した透過情報を出力画像に適用する
    395      */
    396     function setTransparentToOutputImage(&$output_gdimg, &$source_gdimg)
    397     {
    398         if ($this->getOutputFormat() != 'gif' && $this->getOutputFormat() != 'png') {
    399             return null;
    400         }
    401 
    402         $trnprt_idx_s = imagecolortransparent($source_gdimg);
    403         if ($trnprt_idx_s >= 0) { // 透過色が設定されている
    404             imagetruecolortopalette($output_gdimg, true, 256);
    405 
    406             // 入力画像から透明色取得
    407             $trnprt_color = imagecolorsforindex($source_gdimg, $trnprt_idx_s);
    408 
    409             // 出力画像に透明色設定
    410             imagecolorset($source_gdimg, 0, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
    411             imagefill($output_gdimg, 0, 0, 0);
    412             imagecolortransparent($output_gdimg, 0);
    413         } elseif ($this->getOutputFormat() == 'png') {  // PNG-24
    414             // アルファチャンネル情報を保存するには、アルファブレンディングを解除する必要がある
    415             imagealphablending($output_gdimg, false);
    416             imagesavealpha($output_gdimg, true);
    417 
    418             // 透過色設定
    419             $color = imagecolorallocatealpha($output_gdimg, 0, 0, 0, 127);
    420             imagefill($output_gdimg, 0, 0, $color);
    421         }
    422     }
    423355}
    424356
  • OpenPNE/branches/work/ebihara/prj_renew_OpenPNE_Img/webapp/lib/OpenPNE/Img/Generator/GD.php

    r6956 r6957  
    1515class OpenPNE_Img_Generator_GD extends OpenPNE_Img_Generator
    1616{
     17    /**
     18     * GDイメージのリサイズ+形式変換
     19     *
     20     * @param resource $raw_img
     21     * @return resource output GD image
     22     */
     23    function resizeImage($raw_img)
     24    {
     25        if (!$source_gdimg  = imagecreatefromstring($raw_img)) {
     26            return false;
     27        }
     28
     29        if ($this->getOutputFormat() == 'jpg') {
     30            // JPEGの場合、携帯対応
     31            imageinterlace($source_gdimg, 0);
     32        }
     33
     34        // リサイズ
     35        $output_img = $this->resizeImage($source_gdimg);
     36
     37        $s_width  = imagesx($source_gdimg);
     38        $s_height = imagesy($source_gdimg);
     39
     40        $o_width  = $this->width;
     41        $o_height = $this->height;
     42        if (!$o_width) {
     43            $o_width = $s_width;
     44        }
     45        if (!$o_height) {
     46            $o_height = $s_height;
     47        }
     48
     49        $this->calcResizedImageSize($o_width, $o_height, $s_width, $s_height);
     50
     51        if (!$this->isResizeImage($o_width, $o_height, $s_width, $s_height)) {
     52            if ($this->isConvertFormat()) {
     53                return $source_gdimg;
     54            }
     55            return false;
     56        }
     57
     58        $output_gdimg = imagecreatetruecolor($o_width, $o_height);
     59        $this->setTransparentToOutputImage($output_gdimg, $source_gdimg);
     60        imagecopyresampled($output_gdimg, $source_gdimg,
     61                0, 0, 0, 0, $o_width, $o_height, $s_width, $s_height);
     62
     63        return $output_gdimg;
     64    }
     65
     66    /**
     67     * 入力画像から取得した透過情報を出力画像に適用する
     68     */
     69    function setTransparentToOutputImage(&$output_gdimg, &$source_gdimg)
     70    {
     71        if ($this->getOutputFormat() != 'gif' && $this->getOutputFormat() != 'png') {
     72            return null;
     73        }
     74
     75        $trnprt_idx_s = imagecolortransparent($source_gdimg);
     76        if ($trnprt_idx_s >= 0) { // 透過色が設定されている
     77            imagetruecolortopalette($output_gdimg, true, 256);
     78
     79            // 入力画像から透明色取得
     80            $trnprt_color = imagecolorsforindex($source_gdimg, $trnprt_idx_s);
     81
     82            // 出力画像に透明色設定
     83            imagecolorset($source_gdimg, 0, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
     84            imagefill($output_gdimg, 0, 0, 0);
     85            imagecolortransparent($output_gdimg, 0);
     86        } elseif ($this->getOutputFormat() == 'png') {  // PNG-24
     87            // アルファチャンネル情報を保存するには、アルファブレンディングを解除する必要がある
     88            imagealphablending($output_gdimg, false);
     89            imagesavealpha($output_gdimg, true);
     90
     91            // 透過色設定
     92            $color = imagecolorallocatealpha($output_gdimg, 0, 0, 0, 127);
     93            imagefill($output_gdimg, 0, 0, $color);
     94        }
     95    }
    1796}
    1897
Note: See TracChangeset for help on using the changeset viewer.