无法通过包“GD::Image”定位对象方法“newFromPng”

Posted

技术标签:

【中文标题】无法通过包“GD::Image”定位对象方法“newFromPng”【英文标题】:Can't locate object method "newFromPng" via package "GD::Image" 【发布时间】:2014-01-13 20:02:02 【问题描述】:

我有一个抛出以下消息的 Perl 脚本:

../script/Perl/gestion-redimensionnement-images.pl 第 271 行。

这是脚本的第 271 行:

my $gd_original =
    ( lc($extension) eq '.png' ) ? GD::Image->newFromPng($fichier_image)
  : ( lc($extension) eq '.gif' ) ? GD::Image->newFromGif($fichier_image)
  : ( $extension =~ m\.jpe?g$i ) ? GD::Image->newFromJpeg($fichier_image)
  :                                  GD::Image->new($fichier_image);

当我使用cpan 检查GD 是否正确安装时,我得到:

pan[1]> install GD
CPAN: Storable loaded ok (v2.34)
Reading '/Users/romain/.cpan/Metadata'
  Database was generated on Mon, 13 Jan 2014 18:53:02 GMT
CPAN: Module::CoreList loaded ok (v2.76)
GD is up to date (2.50).

我的配置有问题吗?

我在 Mavericks 下的 Mac 上运行 Perl v5.16。

【问题讨论】:

我是一个 Perl 菜鸟,所以不要犹豫,问我更多细节。我可能忘记了一些信息。 GD::Image 呢perl -MGD::Image -e 1 当我运行perl -MGD::Image -e 1 时,它什么也不显示。我应该期待什么样的输出? 这意味着你已经安装了模块。你很好。 【参考方案1】:

我怀疑你没有安装 libpng。如果底层图像库存在且可用,GD 将仅提供 newFromPng()、newFromJpeg() 等方法。您可以使用can() 测试各种格式

use GD;
my $gd = GD::Image->new();
my $ok = $gd->can('png') ? 'Yes' : 'No';
print "$ok\n";

您可以使用 MacPorts 或从源代码手动安装 libpng。

【讨论】:

确实,它返回No。我会尝试重新安装 libpng。 好的,所以我的问题与安装libpng有关。我将在 SuperUser 上创建一个专门的问题。谢谢 在 SU 上创建的问题:superuser.com/questions/702248/… 对我来说仍然是个谜 :( 安装 libpng 后,您需要重新安装 GD。你也可以使用 MacPorts 来做到这一点 - 包被称为 p5.14-gd (或任何与你的 perl 版本匹配的)【参考方案2】:

您是否忘记使用GD 模块?

use GD;

尝试一个简单的小例子(使用您自己的 png 文件):

use GD;

my $fichier_image = 'my.png';
my $gd_original = GD::Image->newFromPng($fichier_image);

【讨论】:

use GD; 在脚本开头定义。 谢谢。在这个例子中,我得到了同样的错误:perl test.plCan't locate object method "newFromPng" via package "GD::Image" at test.pl line 4.

以上是关于无法通过包“GD::Image”定位对象方法“newFromPng”的主要内容,如果未能解决你的问题,请参考以下文章

PHP GD Image - 用作内联img src传递变量[关闭]

想快速定位Bug?先学习一下F12抓包吧

怎样通过fiddler抓包定位前后端的问题

#yyds干货盘点#组策略更新失败:windows无法定位目录对象...

如何自动检测调色板与真彩色 png

web测试定位Bug的方法