У меня есть URL-адрес с изображением. Сохраняю изображение внутри переменной. Если я загружаю переменную с помощью Imagick, изображение после удаления альфа-канала повреждено.
код:
$image = new Imagick();
$image->readImageBlob($picture);
$image->writeImage ("test.png");
код:
$image = new Imagick();
$image->readImageBlob($picture);
$image->setImageBackgroundColor('white');
$image->setImageAlphaChannel(11);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->writeImage ("test.png");
Версия PHP 7.3.11
версия модуля imagick: 3.4.4RC2
Imagick скомпилирован с помощью ImageMagick версия: ImageMagick 7.0.7-11 Q16 x64 2017-11-23
Дата выпуска ImageMagick: 23.11.2017
Изображение не работает сразу после "setImageAlphaChannel". Является ли исходный файл причиной проблемы? Если да, есть ли способ восстановить битый образ?
Заранее спасибо!
Редактировать:
Вот мой полный код:
<?php
$url="https://i.imgur.com/jD5hRgO.png";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_REFERER, $url);
$picture = curl_exec ($ch);
curl_close($ch);
$image = new Imagick();
$image->readImageBlob($picture);
$image->writeImage ("before.png");
$image = new Imagick();
$image->readImageBlob($picture);
$image->setImageBackgroundColor('white');
$image->setImageAlphaChannel(11);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->writeImage ("after.png");
?>
11
для установки альфа-канала, который соответствуетOpaqueAlphaChannel
. Вы должны использовать предопределенную константуImagick::ALPHACHANNEL_REMOVE
, которая заменит альфа-канал на цвет фона. - person emcconville   schedule 19.11.2019