Laravel 4.2 抛出 NotReadableException “不支持的图像类型。GD 驱动程序只能解码 JPG、PNG、GIF 或 WebP 文件。”

Posted

技术标签:

【中文标题】Laravel 4.2 抛出 NotReadableException “不支持的图像类型。GD 驱动程序只能解码 JPG、PNG、GIF 或 WebP 文件。”【英文标题】:Laravel 4.2 throws NotReadableException "Unsupported image type. GD driver is only able to decode JPG, PNG, GIF or WebP files." 【发布时间】:2018-09-24 20:26:45 【问题描述】:

在检查了大约 20 个解决方案后,我放弃了,需要帮助。 我有 2 个 JPG 文件。两者都有适当的 mime,它们对于 upload_max_filesize 来说不是太大,名称还可以,路径也可以。每个解决方案都是针对其中一个问题。

我的问题是当我在第一张图片上运行脚本时没问题,没有错误,对象已创建:

$image1 = Image::make(public_path()."/uploads/goodimage.jpg");

参见示例: https://app.esticrm.pl/uploads/goodimage.jpg

当我在其他图片上运行它时出现错误:

$image2 = Image::make(public_path()."/uploads/badimage.jpg");

参见示例: https://app.esticrm.pl/uploads/badimage.jpg

错误信息:

Intervention\Image\Exception\NotReadableException 不支持 图像类型。 GD 驱动程序只能解码 JPG、PNG、GIF 或 WebP 文件。

Windows 和 Linux 上的情况相同。我检查过的每个图形程序和浏览器都打开了文件。 这些问题在 php 从 5.5.x 升级到 5.6.35 后开始出现。以前还好。

【问题讨论】:

dd(public_path()."/uploads/goodimage.jpg") JPEG 流使用什么类型的帧? @user3344003 你的意思是 GD 还是 imagick?像错误一样,GD。 顺序、基线、渐进或其他。 我的 webapp 的每个用户都会创建和上传 JPEG,我不会告诉他们如何存储图片。它应该存储每种类型的流,就像在 5.5.x 中一样。 PHP更新后没有,我正在寻找解决方案。 【参考方案1】:

好的,我找到了解决方案:

$image2 = Image::make(file_get_contents(public_path()."/uploads/badimage.jpg"));

也适用于表单中的文件对象:

$image2 = Image::make(file_get_contents(Input::file('upload_file'));

【讨论】:

【参考方案2】:

我遇到了同样的问题,我的解决方法是下一个。 我不得不更改 nginx 允许用户在 /etc/nginx.conf 中上传的大小,如下所示:

 http 
    client_max_body_size 100M;
 

我还必须更改我的 php.ini,以增加上传文件的大小和总大小:

upload_max_filesize = 4M
post_max_size = 16M

希望能帮助到别人

【讨论】:

【参考方案3】:

更改 php.ini 文件中的以下变量

post_max_size = 128M
upload_max_filesize = 128M

打印 phpinfo() 以找到您的 php.ini 位置。

如果它的 cpanel 在软件部分->php 版本-> 点击“切换到 PHP 选项”。然后更改值。 还将max_execution_time 更改为600

【讨论】:

【参考方案4】:

如果您正在下载远程图像并将其与Image:: 一起使用,请确保正确下载了该图像。有时当您使用file_get_contens() 时,图像不会被下载或大小为 0。 所以下载远程图像的更好方法是使用 CURL,但在这种情况下,您必须确保远程 url 是 https

 $content = $this->url_get_contents(str_replace('http://','https://',$remote_img_path));

url_get_contents() 是 curl 获取远程图像的地方 正如 floyk.com 上所解释的: https://floyk.com/en/post/laravel-unsupported-image-type-gd-driver-is-only-able-to-decode-jpg-png-gif-or-webp-files

【讨论】:

以上是关于Laravel 4.2 抛出 NotReadableException “不支持的图像类型。GD 驱动程序只能解码 JPG、PNG、GIF 或 WebP 文件。”的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中的路由问题

Composer - Forked Laravel 4.2 未安装

找不到类“PushManager”-Laravel 4.2

text 用于Laravel 4.2 #laravel的PHP 7.1加密器

从 4.1 升级到 4.2 后 Laravel 控制器路由中断

Laravel 升级到 4.2 - 需要 mcrypt 扩展