LibGD
用于高级图像处理的开源 C 库
免费的 C API,使开发人员能够快速绘制图像、添加线条、弧线、文本、多种颜色,并将结果写成 PNG 或 JPEG 文件。
数字图像总是比简单的文字吸引更多的访问者。一张图片胜过千言万语。他们有能力吸引 94% 以上的浏览量并吸引更多访客。使用图像传递信息总是更有成效和方便。开源库 LibGD 使程序员能够快速绘制图像、添加线条、弧线、文本、多种颜色,并将结果写成 PNG 或 JPEG 文件。
LibGD 是一个功能强大的图形库,可帮助软件开发人员在其 C 应用程序中动态生成和管理图像。该库可以读取和写入许多不同的图像格式,例如 BMP、GIF、TGA、WBMP、JPEG、PNG、TIFF、WebP、XPM 等等。 LibGD 库通常用于网站开发,但也可以与任何独立应用程序一起使用。该库包含用于图像创建和操作的几个重要功能,例如动态生成图表、图形、缩略图和大多数其他内容。
LibGD 入门
安装 LibGD 的推荐方法是使用 CMake。请使用以下命令进行顺利安装
通过 GitHub 安装 LibGD。
$ make install
使用以下命令克隆最新的源
通过 GitHub 安装 LibGD。
$ git https://github.com/libgd/libgd.git
通过 C 生成和修改图像
LibGD 库提供了轻松创建和操作图像的能力。它允许使用 BMP、GIF、TGA、WBMP、JPEG、PNG、TIFF、WebP、XPM 文件格式创建图像,只需几行 C 代码。该库的一项重要功能是它可以让您即时创建图像。该库以动态创建可在网页上使用的图像而闻名。它使您能够以编程方式创建图像、对其着色、在其上绘图并将其轻松保存到磁盘。
CAPI生成和修改图像
gdImagePtr im;
int black, white;
FILE *out;
// Create the image
im = gdImageCreate(100, 100);
// Allocate background
white = gdImageColorAllocate(im, 255, 255, 255);
// Allocate drawing color
black = gdImageColorAllocate(im, 0, 0, 0);
// Draw rectangle
gdImageRectangle(im, 0, 0, 99, 99, black);
// Open output file in binary mode
out = fopen("rect.jpg", "wb");
// Write JPEG using default quality
gdImageJpeg(im, out, -1);
// Close file
fclose(out);
// Destroy image
gdImageDestroy(im);
通过 C 库调整图像大小
开源 LibGD 库使计算机程序员能够在其应用程序中使用 C 命令即时调整图像大小。首先,您需要提供要加载的图像的完整路径和名称。完成后,您需要提供新图像的宽度和高度以及您选择的要保存它的输出位置。请确保所有提供的信息都是正确的,除了图书馆不接受它并抛出异常。
通过CAPI调整图像
int main (int argc, char *argv[]) {
FILE *fp;
gdImagePtr in, out;
int w, h;
/* Help */
if (argc<=4) {
printf("%s input.jpg output.jpg width height\n", argv[0]);
return 1;
}
/* Size */
w = atoi(argv[3]);
h = atoi(argv[4]);
if (w<=0 || h<=0) {
fprintf(stderr, "Bad size %dx%d\n", h, w);
return 2;
}
/* Input */
fp = fopen(argv[1], "rb");
if (!fp) {
fprintf(stderr, "Can't read image %s\n", argv[1]);
return 3;
}
in = gdImageCreateFromJpeg(fp);
fclose(fp);
if (!in) {
fprintf(stderr, "Can't create image from %s\n", argv[1]);
return 4;
}
/* Resize */
gdImageSetInterpolationMethod(in, GD_BILINEAR_FIXED);
out = gdImageScale(in, w, h);
if (!out) {
fprintf(stderr, "gdImageScale fails\n");
return 5;
}
/* Output */
fp = fopen(argv[2], "wb");
if (!fp) {
fprintf(stderr, "Can't save image %s\n", argv[2]);
return 6;
}
gdImageJpeg(out, fp, 90);
fclose(fp);
/* Cleanups */
gdImageDestroy(in);
gdImageDestroy(out);
return 0;
}
CAPI的作物、翻转、转换或旋转图像
LibGD个图书馆完全支持使用C命令进行编程编辑和剪辑图像。 图书馆为翻转图像提供了多个函数、例如水平或垂直翻转图像以及两者。 像翻转一样、你也很容易根据自己的需要旋转。 一旦完成、你可以轻松地保存图像。 它还支持将NG和JPEG图像转换为其他支持的文件格式。
通过CAPI向AIF转换NG图像
int main(int argc, char **argv)
{
gdImagePtr im;
FILE *in, *out;
if (argc != 3) {
fprintf(stderr, "Usage: png2avif infile.png outfile.avif\n");
exit(1);
}
printf("Reading infile %s\n", argv[1]);
in = fopen(argv[1], "rb");
if (!in) {
fprintf(stderr, "Error: input file %s does not exist.\n", argv[1]);
exit(1);
}
im = gdImageCreateFromPng(in);
fclose(in);
if (!im) {
fprintf(stderr, "Error: input file %s is not in PNG format.\n", argv[1]);
exit(1);
}
out = fopen(argv[2], "wb");
if (!out) {
fprintf(stderr, "Error: can't write to output file %s\n", argv[2]);
gdImageDestroy(im);
exit(1);
}
fprintf(stderr, "Encoding...\n");
gdImageAvifEx(im, out, 100, 0);
printf("Wrote outfile %s.\n", argv[2]);
fclose(out);
gdImageDestroy(im);
return 0;
}
从内存中的缓冲区加载图像
开源库 LibGD 允许软件开发人员加载整个图像以缓冲在他们自己的 C 应用程序内的内存中。加载图像后,开发人员可以轻松地对图像执行不同的操作,例如从缓冲区读取图像、修改图像、将图像保存到特定位置等。完成后,请记住使用正常的内存管理功能释放缓冲区。