(PECL imagick 2.0.0)
Imagick::flattenImages — Merges a sequence of images
Merges a sequence of images. This is useful for combining Photoshop layers into a single image.
成功时返回 TRUE
。
错误时抛出 ImagickException。
Samuel Fine (hi at samuelfine dot com) (2011-12-05 09:32:57)
This is also useful for accurately converting .ico files to .png. (Other types as well, in theory, but I've only tested ico->png.) Simply using setFormat will create a valid .png file, but will result in image artifacts if the original .ico had any transparency. The following code will create an accurate copy:
<?php
$im = new Imagick();
// When dealing with .ico files, make sure to setFormat before loading the image or you'll get a nasty exception. See https://bugs.php.net/bug.php?id=58515 for more details.
$im->setFormat("ico");
$im->readImage("favicon.ico");
$im = $im->flattenImages(); // Thanks for the tip, Jairu5!
$im->setFormat("png");
$new = fopen("favicon.png", "w");
$im->writeImageFile($new);
$im->clear();
$im->destroy();
?>
Jairu5 (2010-11-30 08:29:34)
Note that the function returns an Imagick object and does not modify the existing object. Below is my code for converting a PNG with transparency into a JPG with a background color. This code illustrates the difference.
<?php
$im = new Imagick('image.png');
$im->setImageBackgroundColor('white');
$im->flattenImages(); // This does not do anything.
$im = $im->flattenImages(); // Use this instead.
$im->setImageFormat('jpg');
$im->writeImage('image.jpg');
?>