两个步骤
1,用cairo库来生成一个图片,然后在上面把文字写到图片上
主要用到 cairo_image_curface_surface_create,生成一个空白的图(为了把文字向上写)
cairo_public cairo_surface_t *
cairo_image_surface_create (cairo_format_t format,
int width,
int height);
如果想要添加图片水印,也可以用cairo_image_surface_create_for_data,data就是源format类型的图像数据地址
cairo_public cairo_surface_t *
cairo_image_surface_create_for_data (unsigned char *data,
cairo_format_t format,
int width,
int height,
int stride);
创建完一个cairo surface之后,通过cairo_create来获取cairo_t的结构,类似一个画布,完了就可以往上面写字了
依次是设置字体颜色,透明度,字体格式(宋体之类的),字体大小,要写倾斜字,就提前通过cairo_rotate设置好角度
cairo_move_to,是接下来写字的坐标,cairo_show_text就是要写上的字符串(utf8格式)
cairo_t *cr = cairo_create(surface);
cairo_set_source_rgba(cr, 1.0, 0.0, 1.0, 1.0);
cairo_select_font_face(cr, "serif", 0, 0);
double font_size = 20;
double vSpacing = 50 + font_size;
cairo_set_font_size(cr, font_size);
cairo_save(cr);
double pos_x = 200;
double pos_y = 100;
double y0 = pos_y;
while(pos_x < src_w)
{
y0 = pos_y;
// while(y0 < src_h)
{
cairo_move_to(cr, pos_x, y0);
cairo_show_text(cr, "Luobo00");
y0 += vSpacing;
cairo_move_to(cr, pos_x, y0);
cairo_show_text(cr, "Luobo11");
y0 += vSpacing;
cairo_move_to(cr, pos_x, y0);
cairo_show_text(cr, "Luobo22");
y0 += vSpacing;
cairo_move_to(cr, pos_x, y0);
cairo_show_text(cr, "Luobo33");
}
pos_x += 200;
}
cairo_restore(cr);
2,用pixman库将两个图片合并
这里写了一个 add_watermark的函数,实际上是两个pixman_image_t的像素操作
void pixman_image_composite32 (pixman_op_t op,
pixman_image_t *src,
图片添加水印与文字

本文介绍如何使用cairo和pixman库在图片上添加文字和水印。首先利用cairo库生成图片并书写文字,接着使用pixman库进行图片合成以添加水印。涉及的技术包括图像表面创建、文字绘制及像素级图像合成。
最低0.47元/天 解锁文章
1426

被折叠的 条评论
为什么被折叠?



