cairo和pixman库给bmp图片加文字水印

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

两个步骤

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,
                          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值