Не удается найти метод объекта newFromPng через пакет GD::Image

У меня есть сценарий Perl, который выдает следующее сообщение:

Не удается найти метод объекта «newFromPng» через пакет «GD::Image» в ../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).

Что-то не так с моей конфигурацией?

Я запускаю Perl v5.16 на Mac под управлением Mavericks.


person Romain Linsolas    schedule 13.01.2014    source источник
comment
Я новичок в Perl, поэтому не стесняйтесь спрашивать меня о деталях. Возможно, я забыл какую-то информацию.   -  person Romain Linsolas    schedule 14.01.2014
comment
А как насчет GD::Image perl -MGD::Image -e 1   -  person salparadise    schedule 14.01.2014
comment
Когда я запускаю perl -MGD::Image -e 1, ничего не отображается. Какой результат я должен ожидать?   -  person Romain Linsolas    schedule 14.01.2014
comment
Это означает, что у вас установлен модуль. тебе там хорошо.   -  person salparadise    schedule 14.01.2014


Ответы (2)


Я подозреваю, что у вас не установлен libpng. GD будет предлагать методы newFromPng(), newFromJpeg() и т. д. только в том случае, если базовые библиотеки изображений присутствуют и доступны. Вы можете протестировать различные форматы, используя can()

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

Вы можете установить libpng с помощью MacPorts или вручную из исходного кода.

person tangent    schedule 14.01.2014
comment
Действительно, он возвращает No. Я попробую переустановить libpng. - person Romain Linsolas; 14.01.2014
comment
Итак, моя проблема связана с установкой libpng. Я создам специальный вопрос на SuperUser. Спасибо - person Romain Linsolas; 15.01.2014
comment
Вопрос создан на SU: superuser. com/questions/702248/ До сих пор для меня загадка :( - person Romain Linsolas; 16.01.2014
comment
После того, как вы установили libpng, вам нужно будет переустановить GD. Вы также можете сделать это с помощью MacPorts - пакет называется p5.14-gd (или что-то еще, что соответствует вашей версии perl) - person tangent; 16.01.2014

Вы забыли использовать модуль GD?

use GD;

Попробуйте тривиально небольшой пример (используя свой собственный файл png):

use GD;

my $fichier_image = 'my.png';
my $gd_original = GD::Image->newFromPng($fichier_image);
person toolic    schedule 13.01.2014
comment
use GD; определяется в начале скрипта. - person Romain Linsolas; 14.01.2014
comment
Спасибо. В этом примере я получаю ту же ошибку: perl test.pl Can't locate object method "newFromPng" via package "GD::Image" at test.pl line 4. - person Romain Linsolas; 14.01.2014