2010-10-27 76 views
2

我使用這個類來上傳圖像並調整圖像大小。問題是圖像質量差!我需要上傳圖像而不會丟失質量!上傳圖像不失質量

class SimpleImage { 

    var $image; 
    var $image_type; 

    function load($filename) { 
     $image_info = getimagesize($filename); 
     $this->image_type = $image_info[2]; 
     if($this->image_type == IMAGETYPE_JPEG) { 
     $this->image = imagecreatefromjpeg($filename); 
     } elseif($this->image_type == IMAGETYPE_GIF) { 
     $this->image = imagecreatefromgif($filename); 
     } elseif($this->image_type == IMAGETYPE_PNG) { 
     $this->image = imagecreatefrompng($filename); 
     }  
    } 

    function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) { 
     if($image_type == IMAGETYPE_JPEG) { 
     imagejpeg($this->image,$filename,$compression); 
     } elseif($image_type == IMAGETYPE_GIF) { 
     imagegif($this->image,$filename);   
     } elseif($image_type == IMAGETYPE_PNG) { 
     imagepng($this->image,$filename); 
     } 
     if($permissions != null) { 
     chmod($filename,$permissions); 
     } 
    } 
    function output($image_type=IMAGETYPE_JPEG) { 
     if($image_type == IMAGETYPE_JPEG) { 
     imagejpeg($this->image); 
     } elseif($image_type == IMAGETYPE_GIF) { 
     imagegif($this->image);   
     } elseif($image_type == IMAGETYPE_PNG) { 
     imagepng($this->image); 
     } 
    } 

    function getWidth() { 
     return imagesx($this->image); 
    } 

    function getHeight() { 
     return imagesy($this->image); 
    } 

    function resizeToHeight($height) { 
     $ratio = $height/$this->getHeight(); 
     $width = $this->getWidth() * $ratio; 
     $this->resize($width,$height); 
    } 

    function resizeToWidth($width) { 
     $ratio = $width/$this->getWidth(); 
     $height = $this->getheight() * $ratio; 
     $this->resize($width,$height); 
    } 

    function scale($scale) { 
     $width = $this->getWidth() * $scale/100; 
     $height = $this->getheight() * $scale/100; 
     $this->resize($width,$height); 
    } 

    function resize($width,$height) { 
     $new_image = imagecreatetruecolor($width, $height); 
     imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); 
     $this->image = $new_image; 
    }  
} 

任何人都可以請幫忙嗎?

+0

質量問題已得到解決,但還有一個問題。當我上傳透明PNG圖像時,透明部分變黑。這怎麼能修復? – 2010-10-27 14:43:52

+0

參見例如這裏:http://stackoverflow.com/questions/313070/png-transparency-with-php – mercator 2010-10-27 14:57:51

回答

4

我看到75作爲$compression參數的默認值。您將其作爲imagejpeg的質量參數傳遞。這可能會導致質量損失。

7

一兩件事你可以做的是,當你調用的功能保存,

改變質量參數從75到100,當你調用imagejpeg

質量是可選的,從0(最嚴重的質量範圍,小文件)爲100(最好的質量,最大的文件)。默認值是默認的IJG質量值(約75)。

+0

注意'imagepng',因爲它的數字從'9 - 0'(是的,倒退)。 – 2010-10-27 14:27:21

+0

我認爲完美形象90,但經常使用85可接受的價值。 – nerkn 2010-10-27 14:28:06

0

您保存功能默認質量值爲75.因此,無論是將其調到100還是將默認值更改爲100,都要進行更改。100是最佳質量。