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 — Fusiona una secuencia de imágenes
Descripción
Fusiona una secuencia de imágenes. Esto es útil para combinar capas de Photoshop en una sóla imagen.
Valores devueltos
Devuelve TRUE en caso de éxito.
Errores/Excepciones
Lanza ImagickException en caso de error.
Samuel Fine (hi at samuelfine dot com) ¶
1 year ago
Jairu5 ¶
2 years ago
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');
?>
