无法通过包“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.pl
Can't locate object method "newFromPng" via package "GD::Image" at test.pl line 4.
以上是关于无法通过包“GD::Image”定位对象方法“newFromPng”的主要内容,如果未能解决你的问题,请参考以下文章
PHP GD Image - 用作内联img src传递变量[关闭]