不得不说,让程序员兴奋的事情就是在苦恼了一天,对着一堆一堆的英文文档看的头晕眼花的时候,终于在一张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; }