from PIL import Image"""
取得一个 PIL 图像并且更改所有值为偶数使(最低有效位为 0)
"""def makeImageEven(image):pixels = list(image.getdata())  # 得到一个这样的列表: [(r,g,b,t),(r,g,b,t)...]evenPixels = [(r >> 1 << 1, g >> 1 << 1, b >> 1 << 1, t >> 1 << 1) for [r, g, b, t] in pixels]  # 最低有效位为 0evenImage = Image.new(image.mode, image.size)  # 创建一个相同大小的图片副本evenImage.putdata(evenPixels)  # 把上面的像素放入到图片副本return evenImage"""
内置函数 bin() 的替代,返回固定长度的二进制字符串
"""def constLenBin(int):binary = "0" * (8 - (len(bin(int)) - 2)) + bin(int).replace('0b','')  # 去掉 bin() 返回的二进制字符串中的 '0b',并在左边补足 '0' 直到字符串长度为 8return binary"""
将字符串编码到图片中
"""def encodeDataInImage(image, data):evenImage = makeImageEven(image)  # 获得最低有效位为 0 的图片副本binary = ''.join(map(constLenBin, bytearray(data, 'utf-8')))  # 将需要被隐藏的字符串转换成二进制字符串if len(binary) > len(image.getdata()) * 4:  # 如果不可能编码全部数据, 抛出异常raise Exception("Error: Can't encode more than " + len(evenImage.getdata()) * 4 + " bits in this image. ")encodedPixels = [(r + int(binary[index * 4 + 0]), g + int(binary[index * 4 + 1]), b + int(binary[index * 4 + 2]),t + int(binary[index * 4 + 3])) if index * 4 < len(binary) else (r, g, b, t) forindex, (r, g, b, t) in enumerate(list(evenImage.getdata()))]  # 将 binary 中的二进制字符串信息编码进像素里encodedImage = Image.new(evenImage.mode, evenImage.size)  # 创建新图片以存放编码后的像素encodedImage.putdata(encodedPixels)  # 添加编码后的数据return encodedImage"""
从二进制字符串转为 UTF-8 字符串
"""def binaryToString(binary):index = 0string = []rec = lambda x, i: x[2:8] + (rec(x[8:], i - 1) if i > 1 else '') if x else ''# rec = lambda x, i: x and (x[2:8] + (i > 1 and rec(x[8:], i-1) or '')) or ''fun = lambda x, i: x[i + 1:8] + rec(x[8:], i - 1)while index + 1 < len(binary):chartype = binary[index:].index('0')  # 存放字符所占字节数,一个字节的字符会存为 0length = chartype * 8 if chartype else 8string.append(chr(int(fun(binary[index:index + length], chartype), 2)))index += lengthreturn ''.join(string)"""
解码隐藏数据
"""def decodeImage(image):pixels = list(image.getdata())  # 获得像素列表binary = ''.join([str(int(r >> 1 << 1 != r)) + str(int(g >> 1 << 1 != g)) + str(int(b >> 1 << 1 != b)) + str(int(t >> 1 << 1 != t)) for (r, g, b, t) in pixels])  # 提取图片中所有最低有效位中的数据# 找到数据截止处的索引locationDoubleNull = binary.find('0000000000000000')if locationDoubleNull % 8 != 0:endIndex = locationDoubleNull + (8 - (locationDoubleNull % 8))  # 将endIndex变成能整除8的数else:endIndex = locationDoubleNulldata = binaryToString(binary[0:endIndex])return dataencodeDataInImage(Image.open("D:/55.jpg").convert('RGBA'), '666').save('encodeImage.png')
print(decodeImage(Image.open("encodeImage.png")))

Python 图片隐写术相关推荐

  1. 用python写情书_资深Python程序员用图片隐写术写情书,全公司只有她能看懂,绝了...

    谁说程序员不浪漫!他从事python工作七八年,为了追公司的女同事,竟然用python的图片隐写术在图片上写情书,让全公司只有她才能看懂. image 先介绍一下图片隐写术吧,这是一门有关于将信息隐藏 ...

  2. Python 实现图片隐写术

    一.实验简介 wikipedia 关于隐写术的介绍: 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容.隐写术的英文叫做 Steg ...

  3. 【Python】简单的图片隐写术

    图片隐写术,即在图片里非显式地嵌入信息,实现图片隐写有很多方法. 第一种方式(来自维基百科): 要从上图中获取下图的信息,只需要将上图色彩空间中的每个二进制数都只保留最后两位(即相当于与3做按位与计算 ...

  4. python开发图片_python实现简单的图片隐写术

    本文转载自Python3图片隐写术 载体文件相对隐秘文件的大小越大,隐藏后者就越加容易.因为这个原因,数字图像在因特网和其他传媒上被广泛用于隐藏消息.例如一个24位的位图中的每个像素的三个颜色分量(红 ...

  5. 杂项题的基本解题思路——2、图片隐写术

    图片隐写术 图片隐写的常见隐写方法 ①firework工具 使用winhex打开文件时会看到头部中包含fireworks的标识 ,通过firework可以找到隐藏图片 使用场景:查看隐写的图片文件 ② ...

  6. RGB图片隐写术免杀

    微信公众号:乌鸦安全 扫取二维码获取更多信息! 1. 前言 目前杀软比较厉害,如果直接运行exe的话,相对来说免杀难度大一点(但也不绝对),尤其是某些厂商,针对一些打包exe的工具进行无脑杀,所以这里 ...

  7. Python3 图片隐写术

    Python3 图片隐写术 一.实验简介 wikipedia 关于隐写术的介绍: 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容 ...

  8. python 图片 文本 矫正

    python 图片 文本 矫正 代码 # -*- coding: UTF-8 -*- import numpy as np import cv2 import os ## 图片旋转 def rotat ...

  9. python图片识别-Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

最新文章

  1. python多元线性回归模型_python – 使用Tensorflow的多元线性回归模型
  2. PHP中使用redis执行lua脚本示例
  3. 【转载】向量空间模型VSM及余弦计算
  4. 面试基础算法及编程 第三弹(树(二叉树)相关:主要考察指针相关的操作)
  5. 快速上手Linux核心命令(三):文件和目录操作命令
  6. Kotlin学习笔记 第四章注解
  7. opencv读取usb摄像头_2020 款 11寸 iPad Pro 深度摄像头 RGBD 视频流可视化
  8. 玩转spring boot——开篇
  9. pmm 监控mysql、mongodb、系统
  10. 数据同步一致性_微服务架构:利用事件驱动实现最终一致性
  11. 在BAE上部署Pomelo
  12. java 生成二维码,带logo,底部文字
  13. 利用FlashPaper在web页面中显示PDF文件(兼容各浏览器)
  14. 分享几个在线网站备案查询
  15. 经典网页三剑客html、css 和 JavaScript实现的导航网页
  16. 经典的双响io电平转换电路仿真
  17. python中年大叔学编程_中年大叔学编程-我用Python保存金山词霸每日一句
  18. 7-17 爬动的蠕虫
  19. 2012年度十大杰出IT博客之 蒋金楠
  20. java中jar文件

热门文章

  1. GameFramework框架详解之 Sound声音管理
  2. c语言iconv转码错误,iconv编码转换的问题
  3. floodlight安装
  4. VS2010/MFC 编程入门教程之目录和总结
  5. 前端:xadmin 实现二级联动
  6. 用校园网配置虚拟机里的网络配置心得
  7. 第019课 I2C协议详解及裸机程序分析
  8. ACS606驱动器源代码,成熟量产低压无刷伺服驱动 源码
  9. Hunter2099以原创IP赋能数字藏品,引领中式潮流美学 “破圈”
  10. ASP.NET Core基础知识(三)【依赖关系注入(服务)】