我正在使用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
任何想法?
谢谢!
答案 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但不能写它们,这就是你的麻烦所在。
我建议您切换到GraphicsMagick和Graphics::Magick
。 GraphicsMagick是ImageMagick的一个分支,速度更快,错误更少,这就是Flickr内部使用的,所以它应该足够好。不幸的是,GraphicsMagick使用了一些有点奇怪的ImageMagick API,但你可以毫不费力地隐藏包装器背后的丑陋细节。
或者,将所有缩略图保存为JPEG或PNG。