PHP 8.4.1 Released!

Imagick::writeImage

(PECL imagick 2 >= 2.3.0, PECL imagick 3)

Imagick::writeImageEscribe una imagen al nombre de fichero especificado

Descripción

public Imagick::writeImage(string $filename = NULL): bool

Escribe una imagen al nombre de fichero especificado. Si el parámetro 'filename' es NULL, la imagen se escribe en el nombre de fichero establecido por Imagick::readImage() o Imagick::setImageFilename().

Parámetros

filename

Nombre del fichero donde escribir la imagen. La extensión del nombre de fichero define el tipo del fichero. El formato puede ser forzado independientemente del formato que use la extensión del fichero: usando un prefijo, por ejemplo "jpg:test.png".

Valores devueltos

Devuelve true en caso de éxito.

add a note

User Contributed Notes 4 notes

up
7
SkepticaLee
10 years ago
When running Imagick as packaged with the Abyss Web Server, neither this method nor writeImages () works. Instead the format has to be declared and the file saved by using another method or procedure, e.g.:

<?php
$im
= new Imagick ();
$im->newImage (300, 225, "blue");
$im->writeImage ("test_0.jpg"); // fails with no error message
//instead
$im->setImageFormat ("jpeg");
file_put_contents ("test_1.jpg", $im); // works, or:
$im->imageWriteFile (fopen ("test_2.jpg", "wb")); //also works
?>
up
1
pfz at pfzone dot org
11 years ago
With Imagick 3.1.0RC2, PHP4.8
If you plan to overwrite the file you're working on, before doing writeImage, consider clearing the file buffer before the write statement :

<?php
$image
= new Imagick($your_file);
/* some processing */

clearstatcache(dirname($your_file));
// or
unlink($your_file);
$image->writeImage($your_file);
?>
It happened to me that the resulting file size was wrong. This could lead to truncation, as the file is not expanded.
This happened while working on JPEG, and PNG.

this line worked for me without this hack.
<?php
file_put_contents
($your_file, $image);
?>

Do not rely on getImageLength() for sending your image, especially when keepalive is ON. Content length is then relevant, and must be set. If the wrong size is given, your image will be truncated.
Use filesize($your_file_) once written or strlen($image) instead (which renders your image and updates getImageLength() result).
up
-1
icinagle at gmail dot com
13 years ago
If you are trying to manipulate a uploaded file and then save the file all in the same request with Apache + mod_dav this will fail.
mod_dav puts a lock on the file during the request where the file is uploaded so trying to save the smallest file, e.g. 1kb will fail with a "Failed to allocate memory" error.
up
-4
Anonymous
10 years ago
I opened image with Imagick::readImageBlob. When I wanted to save resized image Imagick::writeImage did not work, but Imagick::writeImageFile did.

$image = new Imagick();
$image->readImageBlob($image_data);
// $image->writeImage($fileDst) did not work
if($f=fopen($fileDst, "w")){
$image->writeImageFile($f);
}
To Top