0

我有一个存储在变量中的 PNG 图像。该文件没有损坏,但很大(26,7mb / 2908x3444 像素)。我想加载图像并且已经在许多其他图像上使用了 imagecreatefromstring。但在这张图片上,它会因为“zTXt:块数据太大”而失败。我认为这可能是由 imagecreatefromstring 引起的,所以我安装了 Imageick 并尝试了 readImageBlob,但我得到了同样的错误。

如何加载具有 bis 文件大小的图像?

测试脚本:

<?php

$picture = file_get_contents('https://live.staticflickr.com/65535/49177974597_69c2581172_o_d.png');
$image=imagecreatefromstring($picture);

header('Content-type:image/png');
header("Content-Disposition: inline; filename=picture.png");
echo imagepng($image);

?>

编辑:Álvaro González 的回答是正确的,图像已损坏。我从没想过图像已损坏,因为它显示在大多数图像查看器(包括 Windows 图片查看器)中。Gimp 是分析哪些图片损坏和哪些没有损坏的正确工具。

在我的具体情况下,这个在我的 PHP 脚本中下载的 .png 图像是由我以前的脚本生成的。

此脚本已下载原始图像(这是一个 .tiff 文件),删除 alpha 并将其转换为 png。

我的错误是,我使用 Imagick 完成了以下操作: 1. 下载文件 2. 删除 alpha 3. 展平 4. 删除 alpha 5. 转换为 png 6. 保存

现在我执行以下操作: 1. 下载文件 2. 转换为 png 3. 删除 alpha 4. 保存

该图像现在在所有图像查看器(包括 Gimp 和 Windows 图片查看器)中可见,并且当我想在 PHP 中输​​出它时正确显示。

4

1 回答 1

1

“zTXt: chunk data is too large”表示文件损坏。要确认您可以使用例如 GIMP 打开它:

GIMP:阅读时出错

主要供应商的工具(例如 Chrome 或 Firefox)往往更具弹性,并且通常可以恢复损坏的数据并正常显示它,但较小的开源工具(例如 GIMP 或 PHP)只会发生冲突。

于 2019-12-06T15:05:42.460 回答