2011-01-13 44 views
2

當調整一些png圖像的大小時,它們看起來會拉長,看上去像垂直隔行掃描。我不確定問題出在哪裏,但是我開始思考它,因爲圖像從灰度開始,需要有不同的顏色配置文件。調整灰度PNG大小時出現白線

任何幫助或建議,將不勝感激。

function createImageSize($sourcefile, $setNewName, $maxwidth, $maxheight, $quality){ 

    $fileInfoArray = @getimagesize($sourcefile); 
    $imagetype = $fileInfoArray['mime']; 

    list($width, $height, $attr) = getimagesize($sourcefile); 

    switch($imagetype){ 
     case 'image/jpeg': 
      $img = imagecreatefromjpeg($sourcefile); 
      break; 

     case 'image/gif': 
      $img = imagecreatefromgif($sourcefile); 
      break; 

     case 'image/png': 
      $img = imagecreatefrompng($sourcefile); 
      break; 

     case 'image/x-png': 
      $img = imagecreatefrompng($sourcefile); 
      break; 
    } 

    if ($width > $maxwidth || $height > $maxheight){ 
     if ($width > $height){ 
      $newwidth = $maxwidth; 
      $ratio = $maxwidth/$width; 
      $newheight = floor($height * $ratio); 

      if ($newheight > $maxheight){ 
       $newheight = $maxheight; 
       $ratio = $maxheight/$height; 
       $newwidth = floor($width * $ratio); 
      } 
     }else{ 
      $newheight = $maxheight; 
      $ratio = $maxheight/$height; 
      $newwidth = floor($width * $ratio); 

      if ($newwidth > $maxwidth){ 
       $newwidth = $maxwidth; 
       $ratio = $maxwidth/$width; 
       $newheight = floor($height * $ratio); 
      } 
     } 
    }else{ 
     $newwidth = $width; 
     $newheight = $height; 
    } 

    $tmpimg = imagecreatetruecolor($newwidth, $newheight); 

    if($imagetype == 'image/png'||$imagetype == 'image/x-png'){ 
     imagealphablending($tmpimg, false); 
     imagesavealpha($tmpimg, true); 

     if($imagetype == 'image/gif'){ 
      $transparent = imagecolorallocatealpha($tmpimg, 0, 0, 0, 127); 
      imagecolortransparent($tmpimg, $transparent); 
     } 

     imagefilledrectangle($tmpimg, 0, 0, $newwidth, $newheight, $transparent); 
    } 

    imagecopyresampled($tmpimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

    switch($imagetype){ 
     case 'image/jpeg': 
      imagejpeg($tmpimg, $setNewName, $quality); 
      break; 

     case 'image/gif': 
      imagegif($tmpimg, $setNewName); 
      break; 

     case 'image/png': 
      imagepng($tmpimg, $setNewName, 3); 
      break; 

     case 'image/x-png': 
      imagepng($tmpimg, $setNewName, 3); 
      break; 
    } 
    imagedestroy($tmpimg); 
    imagedestroy($img); 
} 

回答

2

我有同樣的問題。在將EPS文件生成爲透明PNG文件(稍後用作掩碼圖像)時,iMagick將PNG文件創建爲灰度。當GD讀取灰度PNG時,它會將它們水平加倍,並在其中包含垂直線。

我的解決辦法的面面面處理,以迫使它寫的PNG爲RGBA:

前:

$image->setImageFileName("image.png"); 

後:

$image->setImageFileName("png32:image.png"); 

我不知道你的灰度PNG來自哪裏,但如果你正在生成它們,確保它們是創建RGBA。否則,也許有一種方法可以正確讀取GD,指定灰度來源。

0

我有同樣的問題,仍然沒有發現任何解決方案。看起來GD不喜歡灰度PNG8圖像,並且正在解釋爲彩色。

我可能必須使用exec()「convert」將圖像轉換回24位,然後刪除圖像,但它遠非最佳。

+0

您是否正在運行檢查以查看圖像是灰度還是PNG8?看起來這可能是一個很好的方法來解決這個問題,所以如果不需要的話,並不是每個PNG8都會被轉換。 – stwhite 2011-01-27 08:28:17