看到有好几个人收藏, 但是没人回复,把我实验的结果贴出来吧
直接使用gdImageCopyMerge来合并水印图和目标图的话,水印图的透明部分变成了不透明的,所以先用
gdImageCopy把将要合并的区域扣出来与水印合并,这样Merge之后视觉上就是透明的了
用连续gdImageCopyMerge的方法是可行的
int offsetx = 0,offsety = 0;
while(offsetx < dst->sx ){
gdImageCopy(watermark_mix, dst, 0, 0, offsetx, wdy, watermark->sx, watermark->sy);
gdImageCopy(watermark_mix, watermark, 0, 0, 0, 0, watermark->sx, watermark->sy);
gdImageCopyMerge(dst, watermark_mix, offsetx, wdy, 0, 0, watermark->sx, watermark->sy, 75);
while( offsety < dst->sy){
gdImageCopy(watermark_mix, dst, 0, 0, offsetx, offsety, watermark->sx, watermark->sy);
gdImageCopy(watermark_mix, watermark, 0, 0, 0, 0, watermark->sx, watermark->sy);
gdImageCopyMerge(dst, watermark_mix, offsetx, offsety, 0, 0, watermark->sx, watermark->sy, 75);
offsety = offsety + watermark->sx + 10;
}
offsetx = offsetx + watermark->sx + 10;
offsety = 0;
}
但是 这么写并不是理想的方案,因为这么处理之后的图片尺寸达到了原始图片的10倍.显然也不适合用在nginx上.