Perl模块Image :: Imlib2麻烦保存GIF

时间:2011-12-05 20:56:25

标签: perl image save gif perl-module

我正在使用perl模块Image: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 个答案:

答案 0 :(得分:3)

我认为Imlib2根本不支持编写GIF文件。从一个相当old mailing list posting

  

我发现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但不能写它们,这就是你的麻烦所在。

我建议您切换到GraphicsMagickGraphics::Magick。 GraphicsMagick是ImageMagick的一个分支,速度更快,错误更少,这就是Flickr内部使用的,所以它应该足够好。不幸的是,GraphicsMagick使用了一些有点奇怪的ImageMagick API,但你可以毫不费力地隐藏包装器背后的丑陋细节。

或者,将所有缩略图保存为JPEG或PNG。