用pixman库给bmp图像添加隐形文字水印

本文介绍了LSB(最低有效位)隐写术如何将文字字符串隐形地嵌入BMP图像中,通过修改图像像素最低位实现文字水印,展示了代码示例和实际操作效果。

LSB 全称为 least significant bit,是最低有效位的意思。Lsb 图片隐写是基于 lsb 算法的一种图片隐写术,以下统称为 lsb 隐写,这是一种常见的信息隐藏方法。通常是把src图像写入dst图像,但我们肉眼去看却并不能分辨被写入src图像的dst图像与没有被写入的dst图像有任何区别。

bmp图像是位图,比如 800 600大小的一张32位bmp图像,除了bmp文件头54字节之外,后面就是存储的位图信息,位图信息通常由rgba来排列,24位的bmp图像就是按照rgb来排列,每个像素点分别由argb分量,每个分量都是一个char来表示,所以bmp的大小应该是 800 * 600 * 4 + 54 = 1920054个字节。

而每个分量由4字节,32位来表示,比如颜色 a分量数值是101,也就是 0110 0101,咱们把这个数的最低位从1改成0,那么a变成100,也就是 0110 0100,我们肉眼是察觉不出来的。常用的隐写术是将后两位都设置成0,也就是说,哪怕103(01100111)被改成100(01100100),我们肉眼也看不出来。

所以文字盲水印的原理就是,把文字字符串转成二进制,然后依次替换bmp位图的末bit位,这样就达到了效果

那试试把文字串通过隐写加入到bmp中,看看图像有什么变化,直接上代码

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <errno.h>
#include <pixman.h>

#define MAX_WATERMARK_LEN 100

#pragma pack(2)

typedef struct BITMAPFILEHEADER  
{   
    uint16_t bfType;   
    uint32_t bfSize;   
    uint16_t bfReserved1;   
    uint16_t bfReserved2;   
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值