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();
?>
Imagick::flattenImages
(PECL imagick 2.0.0)
Imagick::flattenImages — Fusionne une séquence d'images
Description
Fusionne une séquence d'images. Ceci est pratique pour combiner une série de couches Photoshop en une seule image.
Valeurs de retour
Returns TRUE on success.
Erreurs / Exceptions
Lance une exception ImagickException si une erreur survient.
Samuel Fine (hi at samuelfine dot com)
05-Dec-2011 10:32
Jairu5
30-Nov-2010 09:29
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');
?>
