Я хочу, чтобы выбрать, какие слои из .PSD-изображения будут объединены в окончательное выходное изображение .JPG.
Я могу объединить все слои изображения:
$im = new Imagick('test.psd'); $im->flattenImages(); $im->setImageFormat('jpg'); $im->writeImage('test.jpg');
Однако .psd содержит около 10 слоев, и я хочу иметь возможность указать, какие конкретные слои должны быть объединены вместе, чтобы создать окончательное изображение.
Например, я хочу объединить только номера слоев 3, 5 и 10 или слои с именами «RED», «GREEN», «BLUE»,
Хотя ответ hsz верен, и это лучший способ, когда изображения очень большие, вам нужно заранее знать, какие слои вы хотите объединить.
Вы можете сделать то же самое более программно, используя setIteratorIndex
для доступа к отдельным слоям и добавления их к выходному изображению.
$imagick = new \Imagick(realpath("../images/LayerTest.psd")); $output = new \Imagick(); $imagick->setIteratorIndex(1); $output->addImage($imagick->getimage()); $imagick->setIteratorIndex(2); $output->addImage($imagick->getimage()); $merged = @$output->flattenimages(); $merged->setImageFormat('jpg'); $merged->writeImage('test.jpg');
Вы можете получить доступ к третьему слою с помощью
test.psd[3]
Просто попробуйте:
$im = new Imagick(array('test.psd[3]', 'test.psd[5]', 'test.psd[10]'));