2010-10-26 122 views
2

問題:將任何PNG圖像轉換爲JPEG圖像時,圖像全部變爲黑色JPEG圖像使用PHP轉換PNG圖像時轉爲全黑色

首先,我搜索了互聯網和stackoverflow,以瞭解如何做到這一點。我已經嘗試了所有可以在PHP手冊和堆棧溢出中找到的方法。問題依然存在。我使用GD(沒有安裝ImageMagick)。

我的代碼如下。這是對功能的調用:

$tempImage = $dirPath.$filename.$tempMini.".jpg";   
createTempImage($sourcefile, $tempImage, $tempMini_width, $tempMini_height, 100); 

我已經評論了我嘗試過的不同方法。

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

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

if($imagetype == 'image/jpeg'){ 
    $img = imagecreatefromjpeg($sourcefile); 

}elseif($imagetype == 'image/gif'){ 
    $img = imagecreatefromgif($sourcefile); 

}elseif(($imagetype == 'image/png')||($imagetype == 'image/x-png')){ 
    $img = imagecreatefrompng($sourcefile); 
} 

$width = imagesx($img); 
$height = imagesy($img); 

if ($width > $maxwidth || $height > $maxheight){ 
    $factor = min(($maxwidth/$width),($maxheight/$height)); 
    $newwidth = round($width*$factor); 
    $newheight = round($height*$factor); 
} else { 
    $newwidth = $width; 
    $newheight = $height; 
} 


$tmpimg = imagecreatetruecolor($newwidth, $newheight); 
imagecopyresampled($tmpimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
imagejpeg($tmpimg, $setNewName, 100); 

imagedestroy($tmpimg); 
imagedestroy($img); 

}

下也已經嘗試:

$white = imagecolorallocate($tmpimg, 255, 255, 255); 
ImageFill($tmpimg, 0, 0, $white); 
ImageSaveAlpha($tmpimg, false); 
ImageAlphaBlending($tmpimg, false); 
$white = imagecolorallocate($tmpimg, 255, 255, 255); 
imagefilledrectangle($tmpimg, 0, 0, $newwidth, $newheight, $white); 

更新:頂部黑匣子是圖像結果:http://twitpic.com/30ywf5

+0

在MIME檢測中添加最後的else語句: 'else die(「unknown format」);' – jmz 2010-10-26 07:55:04

+0

你能舉一個例子PNG嗎?你是否嘗試過來自不同來源的各種PNG? – 2010-10-26 08:20:59

+1

每次我嘗試從Google獲取新的.PNG圖像時。 頂部框是圖像結果:http://twitpic.com/30ywf5 – stwhite 2010-10-26 08:27:15

回答

0

我似乎已經從頭開始重新創建整個功能,解決了這個問題。謝謝你們的意見。

問題是PNG沒有被上傳。使用已上傳的URL執行腳本時,它工作正常。

再次感謝。

1

只是一對夫婦的想法:

  • $newHeight = $maxheight;似乎是一個錯字,「newheight」在整個代碼中拼寫時沒有大寫「H」。

  • 的代碼,以確定新的大小可以sigificantly縮短:

if ($width > $maxwidth || $height > $maxheight){
$factor = min(($maxwidth/$width),($maxheight/$height));
$newwidth = round($width*$factor);
$newheight = round($height*$factor); }

  • 您使用imagecopyresampled到CRE吃了新的圖像 - 這隻適用於特定的GD版本(「版本2」),否則請嘗試使用imagecopyresized
+0

感謝您的幫助。我很感激。 不幸的是,imagecopyresized沒有爲我工作。 圖像仍然是完全黑色的。我每次都選擇新的圖像,都是.PNG格式。 – stwhite 2010-10-26 08:17:32

+0

你可能想看看這段代碼:http://www.beehave。de/forum/aktuelle-version-von-uploadpic-1-3-9-t527.html它是phpBB軟件的附件,可以上傳圖片。上傳PNG並調整大小會導致(不是黑色)JPG,因此您可以通過分析如何處理上傳/調整大小來找到解決方案。 – Select0r 2010-10-26 08:58:06

+0

你忘了在縮短的代碼後面的'else'語句中。如果你這樣做,$ newwidth和$ newheight可能是NULL。 – Select0r 2010-10-26 11:44:38

相關問題