PHP Conference Japan 2024

Imagick::writeImage

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

Imagick::writeImage将图像写入指定的文件名

描述

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

将图像写入指定的文件名。如果文件名参数为 NULL,则图像将写入由 Imagick::readImage() 或 Imagick::setImageFilename() 设置的文件名。

参数

文件名

写入图像的文件名。文件名的扩展名定义了文件的类型。可以使用 format: 前缀强制格式,而不管文件扩展名是什么,例如 "jpg:test.png"。

返回值

成功时返回 true

添加笔记

用户贡献笔记 4 条笔记

13
SkepticaLee
10 年前
当在 Abyss Web Server 中打包的 Imagick 中运行时,此方法和 writeImages() 都无法工作。相反,必须声明格式并使用其他方法或过程保存文件,例如:

<?php
$im
= new Imagick ();
$im->newImage (300, 225, "blue");
$im->writeImage ("test_0.jpg"); // 失败,无错误消息
//替代方法
$im->setImageFormat ("jpeg");
file_put_contents ("test_1.jpg", $im); // 工作,或者:
$im->imageWriteFile (fopen ("test_2.jpg", "wb")); // 也能工作
?>
0
icinagle at gmail dot com
13 年前
如果您尝试操作上传的文件,然后在 Apache + mod_dav 的同一个请求中保存该文件,这将失败。
mod_dav 在上传文件的请求期间对文件进行锁定,因此尝试保存最小的文件(例如 1kb)将失败,并出现“内存分配失败”错误。
-1
pfz at pfzone dot org
12 年前
使用 Imagick 3.1.0RC2,PHP 4.8
如果您计划覆盖正在处理的文件,在执行 writeImage 之前,请考虑在写入语句之前清除文件缓冲区

<?php
$image
= new Imagick($your_file);
/*一些处理*/

clearstatcache(dirname($your_file));
// 或者
unlink($your_file);
$image->writeImage($your_file);
?>
我遇到的情况是结果文件大小错误。这可能导致截断,因为文件没有扩展。
这发生在处理 JPEG 和 PNG 时。

这一行代码对我不需要这个 hack 也能工作。
<?php
file_put_contents
($your_file, $image);
?>

不要依赖 getImageLength() 来发送您的图像,尤其是在 keepalive 为 ON 的情况下。这时内容长度很重要,必须设置。如果给出了错误的大小,您的图像将被截断。
写入后使用 filesize($your_file_) 或使用 strlen($image) 代替(这会呈现您的图像并更新 getImageLength() 的结果)。
-5
匿名
10 年前
我使用 Imagick::readImageBlob 打开了图像。当我想要保存调整大小的图像时,Imagick::writeImage 不起作用,但 Imagick::writeImageFile 起作用了。

$image = new Imagick();
$image->readImageBlob($image_data);
// $image->writeImage($fileDst) 不起作用
if($f=fopen($fileDst, "w")){
$image->writeImageFile($f);
}
To Top