2012-03-09 193 views
0

我有一個腳本,使用GD庫和PHP上傳和調整圖像的大小。 我現在想上傳一個PNG圖像,並將其存儲爲PNG和JPEG,然後我將調整它的大小,但沒關係。PHP的PNG轉換成JPG格式的問題,圖像失真

我遇到的問題是,有時,圖像(jpg)的轉換版本被扭曲。其他時間沒問題。

我的代碼是從這裏另一個答案在計算器上採取:

function png2jpg($originalFile, $outputFile, $quality){ 
    $image = imagecreatefrompng($originalFile); 
    imagejpeg($image, $outputFile, $quality); 
    imagedestroy($image); 
} 

扭曲的結果的一個例子如下所示,我完全知道,我不會得到透明度的JPG,我只是想要一個白色的背景。有任何想法嗎?

我不能發表圖片,所以鏈接到原:http://private.granvilleoil.com/prodImages/large/Petro-Patch.png) 和JPG:http://private.granvilleoil.com/prodImages/large/Petro-Patch.jpg

回答

2

你需要創建一個新的圖像與白色(或任何你想要的)背景,並從PNG複製沒有透明像素到圖像:

function png2jpg($originalFile, $outputFile, $quality) { 
    $source = imagecreatefrompng($originalFile); 
    $image = imagecreatetruecolor(imagesx($source), imagesy($source)); 

    $white = imagecolorallocate($image, 255, 255, 255); 
    imagefill($image, 0, 0, $white); 

    imagecopy($image, $source, 0, 0, 0, 0, imagesx($image), imagesy($image)); 

    imagejpeg($image, $outputFile, $quality); 
    imagedestroy($image); 
    imagedestroy($source); 
} 
+0

純粹的天才! - 感謝您的幫助,完美的作品! – 2012-03-09 10:57:29

0

PHP將只從PNG文件複製像素,並且如果您的PNG具有透明,這將不會被PHP處理導致您在轉換後看到的內容。

+0

感謝您的答覆,但我不明白滿。那麼如何讓PHP將PNG轉換爲JPG呢? – 2012-03-09 10:39:21

+0

我的意思是你會失去PNG文件中具有透明度的任何像素,你最終會得到一個像你的例子中的圖像。這是使用php將png轉換爲jpeg的唯一方法。 – slash197 2012-03-09 10:42:54

0

JPG格式不支持透明像素。

相反,你可以用白色/黑色透明替換像素,然後進行轉換:

function png2jpg($originalFile, $outputFile, $quality){ 
    $size = getimagesize($originalFile); 
    $blank = imagecreate($size[0], $size[1]); 
    $newImage = imagecopymerge($blank, $originalFile, 0, 0, 0, 0, $size[0], $size[1], $quality); 
    png2jpg($newImage, $outputFile,); 
    $image = imagecreatefrompng($newImage); 
    imagejpeg($image, $outputFile, $quality); 
} 
0

也許如果您嘗試從png格式上,你可以修復這個問題的白色圖像的頂部使圖像。

+0

感謝您的回答! – 2012-03-09 10:57:56

0

有我遇到了一個庫它基本上是PHP的GD庫的封裝。它被稱爲GDImageManipulation或其他東西。它是一個簡單的文件類,它處理您正在討論的大部分初步圖像操作。

看看它。它可能有幫助。

問候
Binaek薩卡

相關問題