libgd (GD Library)

简介

libgd 是一个用于动态图形生成的跨平台函数库。它用于创建、操作图像,并且可以嵌入到PHP、Python等语言中。libgd支持多种图像格式,如PNG、JPEG、GIF等,并提供了丰富的绘图功能,如线条、多边形、曲线以及文本等。

备注

libgd 不仅可以用于Web应用,也可以集成到桌面应用程序中,为用户提供图像处理的功能。

使用方法

libgd 提供了广泛的API来创建和修改图像,以下是在思源1号上通过module工具调用libgd并编译示例程序:

  • 制作两帧GIF动图:test.cpp

    #include <gd.h>
    #include <gdfonts.h>
    #include <cstdio>
    #include <cstring>
    
    int main() {
        // 创建GIF文件
        FILE *gifout = fopen("output.gif", "wb");
        if (!gifout) {
            fprintf(stderr, "无法打开文件以保存GIF。\n");
            return 1;
        }
    
        // 创建两帧图像
        int width = 200;
        int height = 100;
    
        // 创建第一帧图像
        gdImagePtr image = gdImageCreate(width, height);
    
        // 定义颜色
        int white = gdImageColorAllocate(image, 255, 255, 255);  // 背景白色
        int black = gdImageColorAllocate(image, 0, 0, 0);        // 文本黑色
    
        // 填充背景
        gdImageFilledRectangle(image, 0, 0, width - 1, height - 1, white);
    
        // 绘制第一帧文本
        const char *text1 = "Frame 1";
        gdFontPtr font = gdFontGetSmall();
        int x1 = (width - gdFontGetSmall()->w * strlen(text1)) / 2;
        int y1 = (height - gdFontGetSmall()->h) / 2;
        gdImageString(image, font, x1, y1, (unsigned char *)text1, black);
    
        // 开始GIF动画
        gdImageGifAnimBegin(image, gifout, 1, 0); // 使用全局颜色表,循环无限
    
        // 添加第一帧
        gdImageGifAnimAdd(image, gifout, 0, 0, 0, 0, 0, 0);
    
        // 创建第二帧图像
        gdImagePtr image2 = gdImageCreate(width, height);
    
        // 填充背景
        gdImageFilledRectangle(image2, 0, 0, width - 1, height - 1, white);
    
        // 绘制第二帧文本
        const char *text2 = "Frame 2";
        int x2 = (width - gdFontGetSmall()->w * strlen(text2)) / 2;
        int y2 = (height - gdFontGetSmall()->h) / 2;
        gdImageString(image2, font, x2, y2, (unsigned char *)text2, black);
    
        // 添加第二帧
        gdImageGifAnimAdd(image2, gifout, 0, 0, 0, 0, 0, 0);
    
        // 结束GIF动画
        gdImageGifAnimEnd(gifout);
    
        // 清理
        gdImageDestroy(image);
        gdImageDestroy(image2);
        fclose(gifout);
        printf("GIF图像已保存为output.gif\n");
        return 0;
    }
    
  • 调用libgd并编译示例程序:

    module purge
    module load gcc/12.3.0
    module load libgd/2.3.3-gcc-12.3.0
    
    g++ -o test test.cpp -lgd
    
  • 执行程序:

    ./test
    

参考链接

请根据实际的文档需求调整以上内容。如果使用的是特定编程语言(如PHP、Python),则需要相应地调整示例代码。


最后更新: 2024 年 11 月 22 日