Ignore:
Timestamp:
2007/02/25 22:37:12 (16 years ago)
Author:
rebelt
Message:

修正です。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • temp/branches/mobile/data/include/image_converter.inc

    r11457 r11458  
    88    var $outputImageWidth;      // ÊÑ´¹¸å¤Î²èÁü¤Î²£Éý 
    99    var $outputImageHeight;     // ÊÑ´¹¸å¤Î²èÁü¤Î¹â¤µ 
    10     //var $outputImageFileSize; // ÊÑ´¹¸å¤Î²èÁü¤Î¥Õ¥¡¥¤¥ë¥µ¥¤¥º 
     10    var $outputImageFileSize;   // ÊÑ´¹¸å¤Î²èÁü¤Î¥Õ¥¡¥¤¥ë¥µ¥¤¥º 
    1111 
    1212    // ¥³¥ó¥¹¥È¥é¥¯¥¿ 
    1313    function ImageConverter() { 
    14         $this->outputImageDir      = realpath(realpath(dirname( __FILE__))); 
    15         $this->outputImageType     = 'jpeg'; 
    16         $this->outputImageWidth    = 100; 
    17         $this->outputImageHeight   = NULL; 
    18         //$this->outputImageFileSize = NULL; 
     14        $this->outputImageDir    = realpath(realpath(dirname(__FILE__))); 
     15        $this->outputImageType   = 'jpeg'; 
     16        $this->outputImageWidth  = 320; 
     17        $this->outputImageHeight = NULL; 
     18        $this->outputFileSize    = 20000; 
    1919    } 
    2020 
     
    2727        $inputImageHeight = $imagesize[1]; 
    2828        $inputImageType   = $imagesize[2]; 
    29         $outputImageName  = base64_encode($inputImagePath . '_' . $this->outputImageWidth . '_' . $filestat['mtime']) . '.' . $this->outputImageType; 
     29        $outputImageName  = sha1($inputImagePath . '_' . $this->outputImageWidth . '_' . $this->outputFileSize . '_' . $filestat['mtime']) . '.' . $this->outputImageType; 
    3030        $outputImagePath  = $this->outputImageDir . '/' . $outputImageName; 
    3131 
     
    6363            } 
    6464 
    65             // ¶õ¥Õ¥¡¥¤¥ëºîÀ® 
    66             $outputImage = ImageCreateTruecolor($this->outputImageWidth, $this->outputImageHeight); 
    67             ImageCopyResampled($outputImage, $tempImage, 0, 0, 0, 0, $this->outputImageWidth, $this->outputImageHeight, $inputImageWidth, $inputImageHeight); 
     65            $scale = 1.0; 
     66            $outputImagePathTemp = $outputImagePath . '.tmp-' . rand(); 
     67            do { 
     68                // ¶õ¥Õ¥¡¥¤¥ëºîÀ® 
     69                $outputImage = ImageCreateTruecolor($this->outputImageWidth * $scale, $this->outputImageHeight * $scale); 
     70                ImageCopyResampled($outputImage, $tempImage, 0, 0, 0, 0, $this->outputImageWidth * $scale, $this->outputImageHeight * $scale, $inputImageWidth, $inputImageHeight); 
    6871 
    69             // ¥Õ¥¡¥¤¥ë½ÐÎÏ 
    70             switch($this->outputImageType) { 
    71             case 1: 
    72             case 'gif': 
    73                 imagegif($outputImage, $outputImagePath); 
    74                 break; 
    75             default: 
    76             case 2: 
    77             case 'jpg': 
    78             case 'jpeg': 
    79                 imagejpeg($outputImage, $outputImagePath); 
    80                 break; 
    81             case 3: 
    82             case 'png': 
    83                 imagepng($outputImage, $outputImagePath); 
    84                 break; 
    85             case 6: 
    86             case 'bmp': 
    87                 imagewbmp($outputImage, $outputImagePath); 
    88                 break; 
    89             } 
     72                // ¥Õ¥¡¥¤¥ë½ÐÎÏ 
     73 
     74                @unlink($outputImagePathTemp); 
     75 
     76                switch ($this->outputImageType) { 
     77                case 1: 
     78                case 'gif': 
     79                    imagegif($outputImage, $outputImagePathTemp); 
     80                    break; 
     81                default: 
     82                case 2: 
     83                case 'jpg': 
     84                case 'jpeg': 
     85                    $quality = 75; 
     86                    // ɽ¼¨²Äǽ¤Ê¥Õ¥¡¥¤¥ë¥µ¥¤¥º°Ê²¼¤Ë¤Ê¤ë¤Þ¤Ç¡¢10%¤º¤Ä¥¯¥ª¥ê¥Æ¥£¤òÄ´À°¤¹¤ë 
     87                    do { 
     88                        @unlink($outputImagePathTemp); 
     89                        imagejpeg($outputImage, $outputImagePathTemp, $quality); 
     90                        $quality -= 10; 
     91                        clearstatcache(); 
     92                    } while (filesize($outputImagePathTemp) > $this->outputFileSize && $quality > 0); 
     93                    break; 
     94                case 3: 
     95                case 'png': 
     96                    imagepng($outputImage, $outputImagePathTemp); 
     97                    break; 
     98                case 6: 
     99                case 'bmp': 
     100                    imagewbmp($outputImage, $outputImagePathTemp); 
     101                    break; 
     102                } 
     103 
     104                // ¥á¥â¥ê³«Êü 
     105                imagedestroy($outputImage); 
     106 
     107                $scale -= 0.1; 
     108                clearstatcache(); 
     109            } while (filesize($outputImagePathTemp) > $this->outputFileSize && $scale >= 0.5); 
     110 
     111            rename($outputImagePathTemp, $outputImagePath); 
    90112 
    91113            // ¥á¥â¥ê³«Êü 
    92114            imagedestroy($tempImage); 
    93             imagedestroy($outputImage); 
    94115 
    95116            $info['convert'] = TRUE; 
    96117        } 
    97118 
    98         /* 
    99         $info['inputImageWidth']   = $inputImageWidth; 
    100         $info['inputImageHeight']  = $inputImageHeight; 
    101         $info['inputImageType']    = $inputImageType; 
    102         $info['inputImagePath']    = $inputImagePath; 
    103         $info['outputImageWidth']  = $this->outputImageWidth; 
    104         $info['outputImageHeight'] = $this->outputImageHeight; 
    105         $info['outputImageType']   = $this->outputImageType; 
    106         */ 
    107119        $info['outputImagePath']  = $outputImagePath; 
    108120        $info['outputImageName']  = $outputImageName; 
     
    112124 
    113125    // Setter 
    114     function setOutputDir($outputDir)   { $this->outputImageDir    = $outputDir;  } 
    115     function setImageType($imageType)   { $this->outputImageType   = $imageType;  } 
    116     function setImageWidth($imageWidth) { $this->outputImageWidth  = $imageWidth; } 
     126    function setOutputDir($outputDir)   { $this->outputImageDir   = $outputDir;  } 
     127    function setImageType($imageType)   { $this->outputImageType  = $imageType;  } 
     128    function setImageWidth($imageWidth) { $this->outputImageWidth = $imageWidth; } 
     129    function setFileSize($fileSize)     { $this->outputFileSize   = $fileSize;   } 
    117130    // function setImageHeight($imageHeight) { $this->outputImageHeight = $imageHeight; } 
    118131 
Note: See TracChangeset for help on using the changeset viewer.