Perl 模块 Image::Imlib2 保存 gif 时遇到问题

发布于 2024-12-20 01:20:15 字数 518 浏览 1 评论 0原文

我正在使用 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

有什么想法吗?

谢谢!

I'm using the perl module Image:Imlib2 to resize photos. Here is the code:

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

This code works fine when I am saving a jpg or png file, but whenever I save a gif, I get an internal server error. Here is the error I get in my apache log file:

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

Any Ideas?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

归属感 2024-12-27 01:20:15

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

我建议您切换到 GraphicsMagickGraphics::Magick。 GraphicsMagick 是 ImageMagick 的一个分支,速度更快且错误更少,这是 Flickr 内部使用的,所以它应该足够适合您。不幸的是,GraphicsMagick 使用了有点奇怪的 ImageMagick API,但是您可以轻松地将丑陋的细节隐藏在包装器后面。

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

I don't think Imlib2 supports writing GIF files at all. From a rather old mailing list posting:

I discovered that Imlib2 has absolutely NO support for writing out gif files.

Furthermore, if you look at the source, you'll see a couple files of interest:

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

Inside loader_png.c you'll find this:

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

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

and inside loader_gif.c, you'll find:

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

but no save implementation. So it looks like Imlib2 can read GIFs but can't write them and that's where your trouble lies.

I'd recommend that you switch to GraphicsMagick and Graphics::Magick. GraphicsMagick is a fork of ImageMagick that is faster and has fewer bugs, this is what Flickr uses internally so it should be good enough for you. GraphicsMagick unfortunately uses the somewhat strange ImageMagick API but you can hide the ugly details behind a wrapper without too much difficulty.

Alternatively, save all your thumbnails as JPEGs or PNGs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文