2016-05-03 65 views
3

我剛剛編寫了PHP代碼來壓縮圖像大小。我的代碼壓縮圖像,但不是所有的時間。在10%的情況下,它會增加圖像尺寸。請說出爲什麼會發生這種情況?這裏是我的代碼(在這裏兩個功能,一是爲PNG圖像等的JPG圖片)圖像壓縮增加了PHP中的文件大小

function compressImageSmall($source_url, $destination_url, $quality) { 
    //$quality :: 0 - 100 
    $info = getimagesize($source_url); 

    if ($info['mime'] == 'image/jpeg') 
    { 
     $image = imagecreatefromjpeg($source_url); 
     //save file 
     imagejpeg($image, $destination_url, $quality);//ranges from 0 (worst quality, smaller file) to 100 (best quality, biggest file). The default is the default IJG quality value (about 75). 
     //Free up memory 
     imagedestroy($image); 
    } 
    elseif ($info['mime'] == 'image/png') 
    { 
     $image = imagecreatefrompng($source_url); 

     //imagepng($image); 

     imageAlphaBlending($image, true); 
     imageSaveAlpha($image, true); 

     /* chang to png qulity*/ 
     $png_quality = 9 - (($quality * 9)/100); 
     imagePng($image, $destination_url, $png_quality);//Compression level: from 0 (no compression) to 9. 
     //Free up memory 
     imagedestroy($image); 

    } 

    //return destination file 
    return $destination_url; 
} 


function compressImage($source_url, $destination_url, $quality) { 
    $info = getimagesize($source_url); 

    if ($info['mime'] == 'image/jpeg') $image = imagecreatefromjpeg($source_url); 
    elseif ($info['mime'] == 'image/gif') $image = imagecreatefromgif($source_url); 
    elseif ($info['mime'] == 'image/png') $image = imagecreatefrompng($source_url); 

    //save it 
    //echo '<pre>';print_r(imagejpeg($image));// 
    imagejpeg($image, $destination_url, $quality); 

    //return destination file url 
    return $destination_url; 
} 
+0

我一直有同樣的問題,有點搜索我發現這篇文章看起來像它會幫助:http://stackoverflow.com/a/ 13258023/1235692 – MrLewk

+0

圖像壓縮算法可能更高效或更低效。如果圖像最初是使用比PHP的/ gd的內置算法更高效的算法創建的,則可能會看到此結果。 – deceze

+0

如果圖像已經是「有損」的格式,比如'jpeg',那麼它已經被最優化地壓縮了它所包含的信息。您嘗試保留相同信息的任何壓縮都至少會增加壓縮方法的開銷。即它會使它變大。 –

回答