gpt4 book ai didi

c - gdImageCopy 的图像是灰度的

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:31 26 4
gpt4 key购买 nike

虽然我想将一些图像和白色 Canvas 与 GD 合并,但以下程序使合并后的图像成为灰度。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gd.h>

int main(int argc, char *argv[])
{
gdImagePtr src, dst, canvas;
FILE *fp, *out;

fp = fopen("./image.jpg", "r");
out = fopen("./image_.jpg", "w");

src = gdImageCreateFromJpeg(fp);

dst = gdImageCreate(150, 94);

gdImageCopyResampled(dst, src, 0, 0, 0, 0, 150, 94, 150, 94);

canvas = gdImageCreate(150, 94);
int ccolor = gdImageColorAllocateAlpha(canvas, 255, 255, 255, 255);
gdImageFilledRectangle(canvas, 0, 0, 150, 94, ccolor);
gdImageCopy(canvas, dst, 0, 0, 0, 0, 150, 94);
dst = canvas;
gdImageJpeg(dst, out, 95);

return 0;
}

图片.jpg

enter image description here

图片_.jpg

enter image description here

相比之下,以下使用 ImageMagick 的程序生成非灰度图像。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wand/MagickWand.h>

int main(int argc, char *argv[])
{
MagickWand *wand;
MagickWand *canvas_wand;
PixelWand *canvas_color;

MagickWandGenesis();

wand = NewMagickWand();
canvas_wand = NewMagickWand();
canvas_color = NewPixelWand();

MagickReadImage(wand, "./image.jpg");

PixelSetRed(canvas_color, 255);
PixelSetGreen(canvas_color, 255);
PixelSetBlue(canvas_color, 255);
PixelSetAlpha(canvas_color, 255);
MagickNewImage(canvas_wand, 150, 94, canvas_color);
MagickCompositeImage(canvas_wand, wand, AtopCompositeOp, 0, 0);
DestroyMagickWand(wand);
wand = canvas_wand;

MagickWriteImage(wand, "./image_.jpg");

DestroyPixelWand(canvas_color);
DestroyMagickWand(wand);
MagickWandTerminus();

return 0;
}

有没有什么好的方法可以通过GD合并制作非灰度图?

仅供引用

$ gdlib-config --version
2.0.36
$

最佳答案

您需要通过调用 gdImageCreateTrueColor 方法来初始化/分配“非灰度”图像。 gdImageCreate 根本无法满足您的需求。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gd.h>

int main(int argc, char *argv[])
{
gdImagePtr src, dst, canvas;
FILE *fp, *out;

fp = fopen("./image.jpg", "r");
out = fopen("./image_.jpg", "w");

src = gdImageCreateFromJpeg(fp);

// dst = gdImageCreate(150, 94);
dst = gdImageCreateTrueColor(150, 94);

gdImageCopyResampled(dst, src, 0, 0, 0, 0, 150, 94, 150, 94);

// canvas = gdImageCreate(150, 94);
canvas = gdImageCreateTrueColor(150, 94);
int ccolor = gdImageColorAllocateAlpha(canvas, 255, 255, 255, 255);
gdImageFilledRectangle(canvas, 0, 0, 150, 94, ccolor);
gdImageCopy(canvas, dst, 0, 0, 0, 0, 150, 94);
dst = canvas;
gdImageJpeg(dst, out, 95);

return 0;
}

关于c - gdImageCopy 的图像是灰度的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17749550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com