Хорошо, я думаю, что, возможно, неправильно понял функцию colorizeImage в Imagick.
Я пытаюсь добавить 70% черного цвета к изображению. Но код работает, только если его 1, а затем просто черное изображение.
но из руководства я не могу найти проблему.
http://php.net/manual/en/imagick.colorizeimage.php
$backdropInFile = JPATH_BASE . '/images/movies/'.$_POST["movieid"].'/backdrop'.$movie['backdrop_path'];
$backdropOutFile = JPATH_BASE . '/images/movies/'.$_POST["movieid"].'/backdrop/'.$_POST["movieid"].'_backdrop.jpg';
$backdropimage = new Imagick($backdropInFile);
$backdropimage->setImageCompression(Imagick::COMPRESSION_JPEG);
$backdropimage->setImageCompressionQuality(60);
$backdropimage->colorizeImage('#000',0.9);
$backdropimage->thumbnailImage(1700, null);
$backdropimage->writeImage($backdropOutFile);
Кто-то знает, что не так, или есть другой способ сделать это?
Раскраска работает странно. Это на самом деле векторная операция, я думаю. Похоже, вы просто хотите отрегулировать цвет, что проще сделать, нарисовав цветной прямоугольник над изображением.
function colorizeImagick(Imagick $imagick, $color, $alpha = 1) {
$draw = new ImagickDraw();
$draw->setFillColor($color);
if (is_float($alpha)) {
$draw->setFillAlpha($alpha);
}
$width = $imagick->getImageWidth();
$height = $imagick->getImageWidth();
$draw->rectangle(0, 0, $width, $height);
$imagick->drawImage($draw);
}
Хорошо, я нашел решение проблемы, сделав это по-другому.
Вот код
$backdropInFile = JPATH_BASE . '/images/movies/'.$_POST["movieid"].'/backdrop'.$movie['backdrop_path'];
$backdropOutFile = JPATH_BASE . '/images/movies/'.$_POST["movieid"].'/backdrop/'.$_POST["movieid"].'_backdrop.jpg';
$backdropimage = new Imagick();
$backdropimage->setBackgroundColor('black');
$backdropimage->readimage($backdropInFile);
$backdropimage->setImageOpacity(0.25);
$backdropimage->setImageCompression(Imagick::COMPRESSION_JPEG);
$backdropimage->setImageCompressionQuality(60);
$backdropimage->thumbnailImage(1700, null);
$backdropimage = $backdropimage->flattenImages();
$backdropimage->writeImage($backdropOutFile);
Я использую colorize, я устанавливаю фоновый цвет, чтобы быть черным перед открытием файла. Затем я установил изображение на 25% прозрачным. А потом я сглаживаю изображение и сохраняю.