C - 将 GIF 转换为 JPG

发布于 2024-09-27 15:28:56 字数 107 浏览 5 评论 0原文

我需要使用 C 编程语言将 GIF 图像转换为 Jpeg 图像。我在网上搜索,但没有找到可以帮助我的示例。任何建议表示赞赏!

编辑:我想使用像 SDL 这样的跨平台开源库来做到这一点。

I need to convert a GIF image to Jpeg image using C programming language. I searched the web, but I didn't find an example which could help me. Any suggestion are appreciated!

EDIT: I want to do this using an cross-platform open-source library like SDL.

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

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

发布评论

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

评论(3

Oo萌小芽oO 2024-10-04 15:28:56

尝试 GDImageMagick

Try the GD or ImageMagick libraries

来世叙缘 2024-10-04 15:28:56

我发现 libafterimage 使用起来非常简单。
在此代码片段中,我还将图像缩放至最多宽度或最多高度,同时保留宽高比:

#include <libAfterImage/afterimage.h>



int convert_image_to_jpeg_of_size(const char* infile, const char* outfile, const double max_width, const double max_height)
{
    ASImage*  im;
    ASVisual* asv;
    ASImage*  scaled_im;
    double    height;
    double    width;
    double    pixelzoom;
    double    proportion;

    im = file2ASImage(infile, 0xFFFFFFFF, SCREEN_GAMMA, 0, ".", NULL);

    if (!im) {

        return 1;
    }

    proportion = (double)im->width / (double)im->height;

    asv = create_asvisual(NULL, 0, 0, NULL);

    if (proportion > 1) {
            /* Oblong. */
        width = max_width;
        pixelzoom = max_width / im->width;
        height = (double)im->height * pixelzoom;
    } else {
        height = max_height;
        pixelzoom = max_height / im->height;
        width = (double)im->width * pixelzoom;
    }

    scaled_im = scale_asimage(asv, im, width, height, ASA_ASImage, 0, ASIMAGE_QUALITY_DEFAULT);

        /* writing result into the file */
    ASImage2file(scaled_im, NULL, outfile, ASIT_Jpeg, NULL);
    destroy_asimage(&scaled_im);
    destroy_asimage(&im);

    return 0;
}

I found libafterimage to be incredibly simple to use.
In this snippet I also scale the image to at most width or at most height, while preserving aspect:

#include <libAfterImage/afterimage.h>



int convert_image_to_jpeg_of_size(const char* infile, const char* outfile, const double max_width, const double max_height)
{
    ASImage*  im;
    ASVisual* asv;
    ASImage*  scaled_im;
    double    height;
    double    width;
    double    pixelzoom;
    double    proportion;

    im = file2ASImage(infile, 0xFFFFFFFF, SCREEN_GAMMA, 0, ".", NULL);

    if (!im) {

        return 1;
    }

    proportion = (double)im->width / (double)im->height;

    asv = create_asvisual(NULL, 0, 0, NULL);

    if (proportion > 1) {
            /* Oblong. */
        width = max_width;
        pixelzoom = max_width / im->width;
        height = (double)im->height * pixelzoom;
    } else {
        height = max_height;
        pixelzoom = max_height / im->height;
        width = (double)im->width * pixelzoom;
    }

    scaled_im = scale_asimage(asv, im, width, height, ASA_ASImage, 0, ASIMAGE_QUALITY_DEFAULT);

        /* writing result into the file */
    ASImage2file(scaled_im, NULL, outfile, ASIT_Jpeg, NULL);
    destroy_asimage(&scaled_im);
    destroy_asimage(&im);

    return 0;
}
小帐篷 2024-10-04 15:28:56

不是最容易使用,但最快的方法几乎肯定是使用 ffmpeg 中的 libavcodec/libavformat。

Not the easiest to use, but the fastest way is almost surely using libavcodec/libavformat from ffmpeg.

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