ImageMagick--打水印

不得不说,让程序员兴奋的事情就是在苦恼了一天,对着一堆一堆的英文文档看的头晕眼花的时候,终于在一张pdf的角落里找到一个貌似相关能解决问题的几句话,拷贝到代码里,编译、运行。。。。结果正确!!!这是我今天最兴奋的事情。

还是那句话,ImageMagick很少有中文文档和资料,还是英文document,还是一个一个的尝试。

我今天的任务是给图片打水印,但是我一直出现的结果是:

重要代码:image.composite(image_w,CenterGravity);


这能叫水印么?直接像贴膏药一样,贴上去的。。。。

这是多么丑啊,如果能像图片右下角的那个就好了。

弄了一天了,终于找到原因了:

把函数换成:image.composite(image_w,CenterGravity,OverCompositeOp);

是从另外一个英文文档中找到了如下这段话:

// CompositeOperator below can be: InCompositeOp, OverCompositeOp, OutCompositeOp
Image::composite(const Image& image_to_overlay, int x, int y, CompositeOperator method)
Image::composite(const Image& image_to_overlay, GravityType pos, CompositeOperator method)
// Example
// Use the 'Over' method to place image_to_overlay over support_image at position (10,10)
support_image.composite(image_to_overlay, 10, 10, OverCompositeOp);

就抱着试一试的态度,一试竟然成功了,我表示我很高兴。



看着好看多了。



代码很简单,就是一句话,不过还是贴出来吧,给那些像我一样在迷途中摸索着艰辛前行的同学们:

// magick_1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Magick++.h>
#include <iostream>
#include <string>
#include <list>
//#pragma comment(lib,"ws2_32.lib")
using namespace std; 
using namespace Magick; 
#include <Windows.h>
#include <draw.h>

int main(int argc,char **argv) 
{ 
  InitializeMagick(*argv);
  Image image( "test.jpg" ); 
  Image image_w("watermark.png");
 
  image.composite(image_w,CenterGravity,OverCompositeOp);

  image.write("test_result.jpg");
  

  return 0; 
}





你可能感兴趣的:(ImageMagick--打水印)