Imagick::writeImage

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

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

描述

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

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

参数

filename

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

返回值

成功时返回 true

添加备注

用户贡献的备注 4 个备注

13
SkepticaLee
10 年前
在将 Imagick 与 Abyss Web Server 一起打包运行时,此方法和 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
11 年前
使用 Imagick 3.1.0RC2、PHP4.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 打开的情况下。内容长度与之相关,必须设置。如果给出错误的大小,您的图像将被截断。
使用 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