2012-03-09 18 views
0

GDライブラリとPHPを使用して画像をアップロードおよびサイズ変更するスクリプトがあります。 PNG画像をアップロードしたいのですが、PNGとJPEGとして保存するにはサイズを変更しますが、それでも問題ありません。PHP PNGからJPGへの変換の問題、画像の歪み

私が抱えている問題は、画像の変換されたバージョン(jpg)が歪んでいることがあることです。それ以外の時は大丈夫です。

私のコードはここにStackOverflow上の別の答えから取得されます:

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

純粋な天才! - あなたの助けをありがとう、完璧に動作します! –

0

をPHPのみPNGファイルからピクセルをコピーし、あなたのPNGは、透明性を持っている場合、これはPHPによって処理されることはありません変換後に表示される結果になります。

+0

ご回答のおかげで、私は完全な理解していません。 PNGをJPGに変換するにはどうすればPHPを入手できますか? –

+0

私は、透明性を持つPNGファイル内のどのピクセルも失うことになり、あなたの例のようなイメージになります。これがpngをPHPでjpegに変換する唯一の方法です。 – slash197

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

答えをありがとう! –

0

私が出会ったライブラリがありました基本的にはPHPのGDライブラリのラッパーであるhttp://www.phpclasses.org/です。それはGDImageManipulationまたは何かと呼ばれました。そのシンプルなファイルクラスは、あなたが話している予備画像操作のほとんどを処理します。

ご覧ください。それは助けるかもしれない。

よろしく
Binaekサルカール