Perl модуль Image :: Imlib2 проблем с сохранением GIF-файлов - PullRequest
2 голосов
/ 06 декабря 2011

Я использую модуль Perl Изображение: Imlib2 для изменения размера фотографий. Вот код:

#create thumbnail
my $old = Image::Imlib2->load("$upload_dir/$name");
my $new = $old->create_scaled_image(80, 80);
$new->save("$upload_dir/$thumbnail_name");

Этот код отлично работает, когда я сохраняю файл jpg или png, но всякий раз, когда я сохраняю gif, я получаю внутреннюю ошибку сервера. Вот ошибка, которую я получаю в моем файле журнала apache:

Image::Imlib2 save error: Unknown error at /path/to/script/script.pl

Есть идеи?

Спасибо!

1 Ответ

3 голосов
/ 06 декабря 2011

Я не думаю, что Imlib2 вообще поддерживает запись файлов GIF.Из довольно старого списка рассылки :

я обнаружил, что Imlib2 абсолютно НЕ поддерживает запись файлов gif.

Кроме того, если выПосмотрите на источник, вы увидите пару интересных файлов:

  • imlib2-1.4.5/src/modules/loaders/loader_png.c
  • imlib2-1.4.5/src/modules/loaders/loader_gif.c

Внутри loader_png.c васВы найдете это:

char
load(ImlibImage * im, ImlibProgressFunction progress,
     char progress_granularity, char immediate_load)
{
    /*...*/
}

char
save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
{
    /*...*/
}

и внутри loader_gif.c, вы найдете:

char
load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
     char immediate_load)
{
    /* ... */
}

, но без save реализации.Похоже, что Imlib2 может читать GIF-файлы, но не может их писать, и в этом ваша проблема.

Я бы порекомендовал вам переключиться на GraphicsMagick и Graphics::Magick.GraphicsMagick - это форк ImageMagick, который работает быстрее и содержит меньше ошибок, это то, что Flickr использует внутри, так что оно должно быть достаточно для вас.К сожалению, GraphicsMagick использует несколько странный API-интерфейс ImageMagick, но вы можете без особых сложностей скрыть уродливые детали за оболочкой.

Либо сохраните все свои эскизы в формате JPEG или PNG.

...