使用GraphicsMagick拼接图片(打图片水印)

通过使用CompositeImage给图片打图片水印

CompositeImage

语法

MagickPassFail CompositeImage( Image *canvas_image, const CompositeOperator compose,
                               const Image *composite_image, const long x_offset,
                               const long y_offset );

该接口将第二张图片(composite_image)拼接到第一张图片(canvas_image)的指定偏移上(x_offset,y_offset)

参数

canvas_image

画布,顾名思义,需要被修改的图对象

compose

该参数指定了拼接算法,主要有以下几种方式:

算法 描述
OverCompositeOp 结果为composite_image覆盖在canvas_image指定位置上
InCompositeOp 看不出与OverCompositeOp的区别
OutCompositeOp 测试结果发现得到的图片为canvas_image
AtopCompositeOp 看不出与OverCompositeOp的区别
XorCompositeOp 结果为composite_image覆盖在canvas_image指定位置上,其中重叠部分为黑色
PlusCompositeOp 结果为composite_image覆盖在canvas_image指定位置上,其中重叠部分为图片数据之和,超过255以255记
MinusCompositeOp 结果为composite_image覆盖在canvas_image指定位置上,其中重叠部分为图片数据canvas_image-composite_image,小于0的记0
AddCompositeOp 结果为composite_image覆盖在canvas_image指定位置上,其中重叠部分为图片数据之和,超过255对256取模
SubtractCompositeOp 结果为composite_image覆盖在canvas_image指定位置上,其中重叠部分为图片数据canvas_image-composite_image,小于0的对256取模
DifferenceCompositeOp 用于比较两图是否相同(测试结果貌似不太符合预计?)
BumpmapCompositeOp 在canvas_image指定位置上打composite_image阴影
CopyCompositeOp 结果为composite_image覆盖在canvas_image指定位置上,哑光信息被忽略。
CopyRedCompositeOp 结果为提取composite_image的red layer覆盖在canvas_image指定位置上
CopyGreenCompositeOp 结果为提取composite_image的green layer覆盖在canvas_image指定位置上
CopyBlueCompositeOp 结果为提取composite_image的blue layer覆盖在canvas_image指定位置上
CopyOpacityCompositeOp 结果为提取composite_image的matte layer覆盖在canvas_image指定位置上
ClearCompositeOp 原图?
DissolveCompositeOp 原图?
DisplaceCompositeOp 对应位置有composite_image透明的阴影?
ModulateCompositeOp 调节 HSL space的亮度?
ThresholdCompositeOp 打阴影?
NoCompositeOp 不做任何事
DarkenCompositeOp 结果为composite_image比canvas_image暗部分覆盖在canvas_image指定位置上?
LightenCompositeOp 结果为composite_image比canvas_image亮部分覆盖在canvas_image指定位置上?

composite_image

复合图对象

x_offset

原图上的拼接列偏移

y_offset

原图上的拼接行偏移

Sample

参考GraphicsMagick CompositeImage给图片打图片水印

加透明度后的水印

disslove.jpg

Code

composite.cpp