以前发布的答案都没有对我有用,但是下面的答案:
$image = new Imagick;
$image->setResolution(300, 300);
$image->readImage("{$originalPath}[0]");
$image->setImageFormat('jpg');
$image->scaleImage(500, 500, true);
$image->setImageAlphaChannel(Imagick::VIRTUALPIXELMETHOD_WHITE);
当我使用 Laravel 框架时,我会获取转换后的图像并使用 Laravel 文件系统存储它。
Storage::put($storePath, $image->getImageBlob());
更新:所以我最近更改了操作系统,而这以前在我的 Mac 上的 Ubuntu 机器上工作,但某些图像仍然是黑色的。
我不得不将脚本更改为以下内容:
$image = new Imagick;
$image->setResolution(300, 300);
$image->setBackgroundColor('white');
$image->readImage("{$originalPath}[0]");
$image->setImageFormat('jpg');
$image->scaleImage(500, 500, true);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
在读取图像之前设置背景颜色似乎很重要。我还展平了所有可能的图层并删除了 Alpha 通道。我觉得我ALPHACHANNEL_REMOVE
在我的 Ubuntu 机器上试过了,但它没有用,所以希望在这些答案之间,读者可以找到适合他们的东西。