2012-01-27 8 views
0

2人の写真をマージする際に問題があります... 私はバッジと呼ばれるpngファイルをユーザーがアップロードした画像とマージしようとしています。 ユーザーはpng oder gifファイルをアップロードするとすべてうまく動作しますが、jpeg画像をアップロードすると出力画像が本当に変わって見えます。それは色の問題のようです。imagecopyresized color jpegが動作しません

This is an successfully badged image

And this happen with an jpeg image

ここに私のコード:

//Calculate position for badge (right bottom corner) 
    $badgeRightPosition = $imageWidth - $badgeWidth; 
    $badgeLeftPosition = $imageHeight - $badgeHeight; 

    $image = imagecreatefromstring(file_get_contents($image)); 
    $badge = imagecreatefromstring(file_get_contents($badge)); 

    $trueColorImage = imagecreatetruecolor($imageWidth, $imageHeight); 
    imagealphablending($trueColorImage, true); 
    imagesavealpha($trueColorImage, true); 

    imagealphablending($badge, true); 
    imagesavealpha($badge, true); 

    imagealphablending($image, true); 
    imagesavealpha($image, true); 

imagecopyresized($trueColorImage, $image, 0, 0, 0, 0, $imageWidth, $imageHeight, $imageWidth, $imageHeight); 
imagecopyresized($trueColorImage, $badge, $badgeRightPosition, $badgeLeftPosition, 0, 0, $imageWidth, $imageHeight, $badgeWidth, $badgeHeight); 
+0

これはどうやってですか?いくつかのコードを入力すると、回答が得られます。 – Nick

+0

また、アップロードされた画像が許容最大値よりも大きい場合は、 widthを指定すると、画像のサイズが変更されます。 正確にここに問題があります...画像のサイズ変更後(画像がjpgの場合)は破損します –

+0

imagecopyresized()の代わりにimagecopyresampled()を使用すると便利ですか? – JochenJung

答えて

0

代わりのimagecreatefromstring(file_get_contents($image));私は直接そのことによって

$imgsrc = @ImageCreateFromJPEG($image); 
if (!$imgsrc) $imgsrc = @ImageCreateFromPNG($image); 
if (!$imgsrc) $imgsrc = @ImageCreateFromGIF($image); 
if (!$imgsrc) $imgsrc = @ImageCreateFromWBMP($image); 

やファイルの種類を確認し、ファイルを開こうとするでしょう終了してから使用するファイルの終わりに応じて上記の関数の1つ。

+0

はどちらも動作しません –

関連する問題