1

背景が白のimage.pngがあり、その上にいくつかの画像があります。

画像をjpgに変換するためにこれを試しました:

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagejpeg($resource); //> I TRIED WITH QUALITY = 100 TOO

問題は、pngが透明度を取得し、jpgがかなり巨大なブラックゾーンを取得したことです。jpgの外観は次のとおりです。

http://img861.imageshack.us/img861/20/context.jpg

問題を解決する方法はありますか?

編集1:

Abiusxが提案したように、私もこれを試しました。

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagealphablending($data, false);
imagesavealpha($data, true);
imagejpeg($resource);

しかし、結果は同じでした。ソースの.png画像は次のとおりです。


(出典:tipradar.com

パトリックのコメントに感謝します:ここでトリック:GD!png画像をjpegに変換し、アルファをデフォルトで黒ではなく白にします

4

2 に答える 2

1

ここで答えてください:

GD!png画像をjpegに変換し、アルファをデフォルトで黒ではなく白にします

于 2011-03-15T13:50:35.527 に答える
-1

これは、PNGのサイズを変更するために使用する関数ですが、透明度を維持します。それでも問題が解決しない場合は、必要な部分を抽出するように指示してください。

function Resize($ImageFile,$OriginalFile)
{
    $ext=basename($OriginalFile);
    $ext=explode(".",$ext);
    $ext=array_pop($ext);
    $ext=strtolower($ext);
    if ($ext=="jpg" or $ext=="jpeg" or $ext=="jpe")
        $img=imagecreatefromjpeg($ImageFile);
    elseif ($ext=="png")
        $img=imagecreatefrompng($ImageFile);
    elseif ($ext=="gif")
        $img=imagecreatefromgif($ImageFile);
    else
        return false;
    list($w,$h)=getimagesize($ImageFile);
    $dstimg=imagecreatetruecolor(140,100);

    imagealphablending($dstimg, false);
    imagecopyresampled($dstimg,$img,0,0,0,0,140,100,$w,$h);
    imagesavealpha($dstimg, true);
    imagepng($dstimg,$ImageFile);
    return true;
}
于 2011-03-15T01:28:29.637 に答える