Задача следующая - есть 10 прозрачных png 1300*1600. Мне необходимо их последовательно наложить друг на друга, и полученное изображение уменьшить до определенных размеров. Сперва я делал это без использования imagick:
1. Создавал пустое изображение $thumb = imagecreatetruecolor();
2. Поочередно открывал каждый png через $img=imagecreatefrompng() и добавлял его в $thumb через imagecopy();
3. Ресайзил через imagecopyresampled();
Но качество картинки после imagecopyresampled() было среднее. Поэтому я решил прибегнуть к imagick, и сделал так:
$img = new Imagick();
$img->readImage('первый png');
затем в цикле накладывал изображения друг на друга:
$image2 = new Imagick();
$image2->readImage('png');
$img->compositeImage($image2, Imagick::COMPOSITE_OVER, 0, 0);
ресайзил:
$img->resizeImage('ширина', 'высота', imagick::FILTER_LANCZOS,1);
Качество стало отличным, но увеличилось время работы скрипта. Выяснилось, что основное время занимает накладывание изображений друг на друга через compositeImage();
ВОПРОС №1: Можно ли как-то ускорить работу compositeImage()? В принципе, я могу накладывать картинки друг на друга как и раньше через:
2. Поочередно открывал каждый png через $img=imagecreatefrompng() и добавлял его в $thumb через imagecopy();
но тогда ВОПРОС №2: как мне в imagick открыть $thumb, созданный через imagecreatetruecolor()?