Имитация умножения Photoshop в PHP с помощью gd или ImageMagick
До сих пор, используя только библиотеку изображений gd PHP для изменения размера, обрезки и изображений в оттенках серого, я в настоящее время пытаюсь найти способ имитировать то, что происходит, когда в Photoshop вы размещаете цветной слой поверх изображения в оттенках серого и выбираете "умножить" из меню эффектов слоя. Или, как объяснил бы мой старый лектор по печати, мне нужно сделать дуотон.
По какой-то причине я подумал, что все, что мне нужно было сделать, это просто повернуть изображение в градациях серого, а затем уронить цветной слой со значением прозрачности менее 100% поверх. Как только я это сделал, я удивился, почему я вообще думал, что получу что-нибудь, кроме вымывания.
Затем, просмотрев документацию библиотеки gd, я смог найти только IMG_EFFECT_OVERLAY
фильтр для использования с imagelayereffect
но в результате этого изображение белого в градациях серого остается белым, а не красным.
Я раньше не использовал ImageMagick (но это один из тех редких случаев, когда у меня есть контроль над сервером, поэтому я могу установить его, если нужно), и, посмотрев на документацию в прошлом, я предположил, что что-то вроде в Photoshop multiply
будет одним из его фильтров по умолчанию. Увы нет.
Мой усталый мозг пытается понять, что такое фотошоп multiply
на самом деле работает по принципу "пиксель за пикселем", поэтому я не знаю, какие серии базовых фильтров ImageMagick (или, если возможно, gd), если таковые имеются, я мог бы использовать для получения нужного результата.
Наступает крайний срок, и Google отказывается возвращать какие-либо полезные результаты, поэтому любая помощь здесь будет с благодарностью получена.
3 ответа
ImageMagick имеет операцию умножения. Я не могу сказать, насколько он близок к Photoshop по результату и качеству (я тоже не совсем понимаю, что он делает:), но обязательно попробуйте.
Я считаю, что это самый простой способ применить Multiply в imagemagick PHP
$print = new Imagick("blank.jpg");
$printOverlayTexture = new Imagick("overlay.jpg");
$print->compositeImage($printOverlayTexture, Imagick::COMPOSITE_MULTIPLY, 0, 0);
Для чего это стоит, вот коллекция удобных сценариев ImageMagick. Они не мои, но я часто обращаюсь к ним