Ни один из ранее опубликованных ответов не сработал для меня, но ниже сработал:
$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, я беру преобразованное изображение и сохраняю его, используя файловую систему Laravels.
Storage::put($storePath, $image->getImageBlob());
Обновление: поэтому я недавно сменил ОС, и хотя раньше это работало на моей машине с Ubuntu на моем Mac, некоторые изображения все еще выходили черными.
Мне пришлось изменить скрипт на следующий:
$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);
Кажется важным установить цвет фона перед чтением на изображении. Я также сглаживаю все возможные слои и удаляю альфа-канал. Мне кажется, что я попробовал ALPHACHANNEL_REMOVE
на своей машине с Ubuntu, и, надеюсь, между этими ответами читатели смогут найти что-то подходящее для них.