Ignore:
Timestamp:
2011/07/08 18:51:41 (10 years ago)
Author:
Seasoft
Message:

#1376 (携帯サイトの画像のサイズがおかしくなる)
#597 (画像サイズ変更で透過GIFが扱えない)

  • 複数枚画像に対応
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_11-dev/data/include/image_converter.inc

    r20973 r21026  
    2828        $inputImageType   = $imagesize[2]; 
    2929 
    30         // GIF 画像は縮小後も GIF 画像で出力する。旧機種対応などで、機種用の画像形式に変換したい場合、この処理は削除する。 
    31         if ($inputImageType == IMAGETYPE_GIF) { 
    32             $this->outputImageType = 'gif'; 
    33         } 
    34  
    35         $outputImageName  = sha1($inputImagePath . '_' . $this->outputImageWidth . '_' . $this->outputFileSize . '_' . $filestat['mtime']) . '.' . $this->outputImageType; 
     30        // 今回実行用の一時変数をセット 
     31        $output_image_width = $this->outputImageWidth; 
     32        $output_image_height = is_null($this->outputImageHeight) 
     33            ? $inputImageHeight * ($output_image_width / $inputImageWidth) 
     34            : $this->outputImageHeight; 
     35        // GIF 画像は縮小後も GIF 画像で出力する。旧機種対応などで、機種用の画像形式に変換したい場合、expr3 に固定する。 
     36        $output_image_type = $inputImageType == IMAGETYPE_GIF ? 'gif' : $this->outputImageType; 
     37 
     38        $outputImageName  = sha1($inputImagePath . '_' . $this->outputImageWidth . '_' . $this->outputFileSize . '_' . $filestat['mtime']) . '.' . $output_image_type; 
    3639        $outputImagePath  = $this->outputImageDir . '/' . $outputImageName; 
    3740 
    38         if (is_null($this->outputImageHeight)) { 
    39             $height_was_null = TRUE; 
    40             $this->outputImageHeight = $inputImageHeight * ($this->outputImageWidth / $inputImageWidth); 
     41        if ($inputImageWidth <= $output_image_width) { 
     42            if ($inputImageHeight <= $output_image_height) { 
     43                $output_image_width  = $inputImageWidth; 
     44                $output_image_height = $inputImageHeight; 
     45            } else { 
     46                $output_image_width = $inputImageWidth * ($output_image_height / $inputImageHeight); 
     47            } 
    4148        } else { 
    42             $height_was_null = FALSE; 
    43         } 
    44         if ($inputImageWidth <= $this->outputImageWidth) { 
    45             if ($inputImageHeight <= $this->outputImageHeight) { 
    46                 $this->outputImageWidth  = $inputImageWidth; 
    47                 $this->outputImageHeight = $inputImageHeight; 
     49            if ($inputImageHeight <= $output_image_height) { 
     50                $output_image_height = $inputImageHeight * ($output_image_width / $inputImageWidth); 
    4851            } else { 
    49                 $this->outputImageWidth = $inputImageWidth * ($this->outputImageHeight / $inputImageHeight); 
    50             } 
    51         } else { 
    52             if ($inputImageHeight <= $this->outputImageHeight) { 
    53                 $this->outputImageHeight = $inputImageHeight * ($this->outputImageWidth / $inputImageWidth); 
    54             } else { 
    55                 if ($this->outputImageWidth / $inputImageWidth < $this->outputImageHeight / $inputImageHeight) { 
    56                     $this->outputImageHeight = $inputImageHeight * ($this->outputImageWidth / $inputImageWidth); 
     52                if ($output_image_width / $inputImageWidth < $output_image_height / $inputImageHeight) { 
     53                    $output_image_height = $inputImageHeight * ($output_image_width / $inputImageWidth); 
    5754                } else { 
    58                     $this->outputImageWidth = $inputImageWidth * ($this->outputImageHeight / $inputImageHeight); 
     55                    $output_image_width = $inputImageWidth * ($output_image_height / $inputImageHeight); 
    5956                } 
    6057            } 
     
    9693            do { 
    9794                // 空ファイル作成 
    98                 if ($this->outputImageType == 'gif') { 
     95                if ($output_image_type == 'gif') { 
    9996                    // 縮小時のノイズ防止のためインデックスカラーで処理する。特に透過色を扱う上で重要。 
    100                     $outputImage = ImageCreate($this->outputImageWidth * $scale, $this->outputImageHeight * $scale); 
     97                    $outputImage = ImageCreate($output_image_width * $scale, $output_image_height * $scale); 
    10198                } else { 
    102                     $outputImage = ImageCreateTruecolor($this->outputImageWidth * $scale, $this->outputImageHeight * $scale); 
    103                 } 
    104  
    105                 ImageCopyResampled($outputImage, $tempImage, 0, 0, 0, 0, $this->outputImageWidth * $scale, $this->outputImageHeight * $scale, $inputImageWidth, $inputImageHeight); 
     99                    $outputImage = ImageCreateTruecolor($output_image_width * $scale, $output_image_height * $scale); 
     100                } 
     101 
     102                ImageCopyResampled($outputImage, $tempImage, 0, 0, 0, 0, $output_image_width * $scale, $output_image_height * $scale, $inputImageWidth, $inputImageHeight); 
    106103 
    107104                // ファイル出力 
     
    109106                @unlink($outputImagePathTemp); 
    110107 
    111                 switch ($this->outputImageType) { 
     108                switch ($output_image_type) { 
    112109                    case 'gif': 
    113110                        if (!empty($arrTransparentColor)) { 
     
    155152 
    156153            $info['convert'] = TRUE; 
    157         } 
    158  
    159         if ($height_was_null) { 
    160             $this->outputImageHeigh = NULL; 
    161154        } 
    162155 
Note: See TracChangeset for help on using the changeset viewer.