簡體   English   中英

php imagick 將 PNG 轉換為 jpg

[英]php imagick convert PNG to jpg

$image = "[...]"; //binary string containing PNG image
$file = fopen('image.tmp', 'wb');
fputs($file, $image);
fclose($file);
$image = new Imagick('PNG:image.tmp');
$image->thumbnailImage($width, $height);
$image->setImageFormat('jpg');
$image->setCompressionQuality(97);
$image->writeImage('image.jpg');

以上不起作用,並為我提供了這張圖片的黑色圖片。 當做而不是

[...]
$image->setImageFormat('png');
$image->setCompressionQuality(97);
$image->writeImage('image.png');

一切都好起來了。 我認為它必須做一些透明背景的事情,這在 JPG 格式中不可用。 任何人都可以幫助解決這個問題(imagick 沒有很好的記錄,所以我不知道如何幫助自己)。

找到了解決方案:

$white=new Imagick();
$white->newImage($width, $height, "white");
$white->compositeimage($image, Imagick::COMPOSITE_OVER, 0, 0);
$white->setImageFormat('jpg');
$white->writeImage('image.jpg');

另一種將透明 png 轉換為 jpg 的方法,如Imagick::flattenImages中所述:

$im = new Imagick('image.png');
$im->setImageBackgroundColor('white');

$im->flattenImages(); // This does not do anything.
$im = $im->flattenImages(); // Use this instead.

$im->setImageFormat('jpg');
$im->writeImage('image.jpg');

隨着時間的推移, flattenImages()已被棄用。
而不是上面的行使用:

$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

您可以使用setBackgroundColor將默認背景顏色設置為黑色以外的其他顏色。 保存為 JPG 時,PNG 透明度將替換為背景顏色。

編輯:像這樣使用它:

$img->setBackgroundColor(new ImagickPixel('#FFFFFF'));

嘗試添加$image->setBackgroundColor(0xFFFFFF); $image = new Imagick('PNG:image.tmp');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM