将PNG转换为JPG,并使用ImageMagick和PHP将透明背景设置为白色

2022-08-30 13:09:01

在将图像从PNG转换为JPEG时,如何使用ImageMagick(带有php扩展名)将透明背景设置为白色?


答案 1

在撰写本文时,您尚未指定要使用的扩展名,但是如果您使用的是命令行,则该命令将为:

convert image.png -background white -flatten -alpha off image.jpg

有关详细信息,请参阅屏蔽用法文档

例如,使用IMagick,我认为您可以按如下方式执行此操作:

(完全未经测试,从未使用过IMagick,也没有安装它来测试)

$image = new IMagick('image.png');

$flattened = new IMagick();
$flattened->newImage($image->getImageWidth(), $image->getImageHeight(), new ImagickPixel("white"));

$flattened->compositeImage($image, imagick::COMPOSITE_OVER, 0, 0);

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

$image->clear();
$image->destroy();
$flattened->clear();
$flattened->destroy();

答案 2

如果您使用的是 Imagick 扩展:

<?php
// load the source transparent png
$i = new IMagick('image.png');

// set the background to white
// you can also use 'rgb(255,255,255)' in place of 'white'
$i->setImageBackgroundColor(new ImagickPixel('white'));

// flattens multiple layers
$i = $i->flattenImages();

// the output format
$i->setImageFormat('jpg');

// save to disk
$i->writeImage('image.jpg');

// and/or output directly
// header('Content-Type: '.$i->getFormat());
// echo $i->getImageBlob();

// cleanup
$i->clear();
$i->destroy();

推荐