private function modifyAllLayers(ImageInterface $image, callable $modifier)
{
if (count($image->layers())) {
$countLayer = 0;
$image->layers()->coalesce();
/** @var ImageInterface $temporaryImage */
$temporaryImage = null;
foreach ($image->layers() as $layer) {
$countLayer += 1;
$layer = call_user_func($modifier, $layer);
if ($countLayer === 1) {
$temporaryImage = $layer;
// use first layer as main image
} else {
$temporaryImage->layers()->add($layer);
}
}
$image = $temporaryImage;
} else {
$image = call_user_func($modifier, $image);
}
return $image;
}