1
儘管我想將一些圖像和白色畫布與GD混合,但下面的程序會使混合的圖像灰度。gdImageCopy的圖像是灰度的
#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;
}
image.jpg的
image_.jpg
與此相對,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混淆?
FYI
$ gdlib-config --version
2.0.36
$