Python PIL库对阻挡文件blk进行解析,生成红绿色位图
# -*- coding: utf-8 -*-
from PIL import Image
import struct
import sys
import os# begin 用于将 blk 转成 红、绿位图
def GenerateImgList(data, color):img_block_list = []for i in range(4, len(data)):cell = struct.unpack("b", data[i:i + 1])if cell[0] == 1:if color == 'red':image = Image.new("RGB", (20, 20), color='red')else:image = Image.new("RGB", (20, 20), color=0x00ff00)else:image = Image.new("RGB", (20, 20), color='white')img_block_list.append(image)return img_block_listdef GenerateImg(img_block_list, width, imgSavePath, w, h):new_image = Image.new("RGB", (w, h))y = 0for i, item in enumerate(img_block_list):x = i % widthif i != 0 and i % width == 0:y += 1new_image.paste(item, (x * 20, y * 20))filp_image = new_image.transpose(Image.FLIP_TOP_BOTTOM)filp_image.save(imgSavePath, 'PNG')
# end 用于将 blk 转成 红、绿位图# begin 合并 红、绿位图
# begin 合并 红、绿位图
def ChangeImg_merge(filePath1, filePath2, save_path):img1 = Image.open(filePath1)width, height = img1.size # 600 400 # 获取图片的宽高pix_array1 = img1.load() # 像素访问对象 type:pixelAccess 获取像素点对应RGB颜色值,可以改变img_array中的值来改变颜色值img2 = Image.open(filePath2)pix_array2 = img2.load()for x in range(width):for y in range(height):tuple1 = pix_array1[x, y]tuple2 = pix_array2[x, y]if tuple1 == (255, 255, 255) and tuple2 == (255, 255, 255):hex_num = (255, 255, 255)elif tuple1 == (255, 255, 255) and tuple2 != (255, 255, 255):hex_num = tuple2elif tuple1 != (255, 255, 255) and tuple2 == (255, 255, 255):hex_num = tuple1else:hex_num = (255, 255, 0)pix_array1[x, y] = hex_numimg1.save(save_path) # 保存
# end 合并 红、绿位图def TraverseRed(basedir):try:red_blk_dir = basedir + '\红blk'for roots, dirs, files in os.walk(red_blk_dir):# 操作根目录下的图片for imgName in files:if imgName.endswith('.blk'):imgNum = imgName.split('.')[0]savedir = basedir + '\合并blk\\' + imgNumif not os.path.exists(savedir):os.mkdir(savedir)imgPath = red_blk_dir + '\\' + imgNameimgSavePath = savedir + '\\' + imgNum + '_红.png'data = open(imgPath, "rb").read() # rb 以二进制格式打开一个文件用于只读blkSize = (w, h) = struct.unpack("hh", data[:4])img_w = blkSize[0] * 20img_h = blkSize[1] * 20img_block_list = GenerateImgList(data, 'red')GenerateImg(img_block_list, blkSize[0], imgSavePath, img_w, img_h)except IOError:print("执行出错,请退出重新尝试!!!")def TraverseGreen(basedir):try:red_blk_dir = basedir + '\绿blk'for roots, dirs, files in os.walk(red_blk_dir):# 操作根目录下的图片for imgName in files:if imgName.endswith('.blk'):imgNum = imgName.split('.')[0]savedir = basedir + '\合并blk\\' + imgNumif not os.path.exists(savedir):os.mkdir(savedir)imgPath = red_blk_dir + '\\' + imgNameimgSavePath = savedir + '\\' + imgNum + '_绿.png'data = open(imgPath, "rb").read() # rb 以二进制格式打开一个文件用于只读blkSize = (w, h) = struct.unpack("hh", data[:4])img_w = blkSize[0] * 20img_h = blkSize[1] * 20img_block_list = GenerateImgList(data, 'green')GenerateImg(img_block_list, blkSize[0], imgSavePath, img_w, img_h)except IOError:print("执行出错,请退出重新尝试!!!")def TraverseMerge(basedir):try:merge_blk_dir = basedir + '\合并blk'for roots, dirs, files in os.walk(merge_blk_dir):if files == []:continuefile_path1 = roots + '\\' + files[0]file_path2 = roots + '\\' + files[1]save_path = roots + '\\' + files[0][:4] + '_合并.png'ChangeImg_merge(file_path1, file_path2, save_path)except IOError:print("执行出错,请退出重新尝试!!!")if __name__ == '__main__':print("start...\n")print("转化中,若文件较多,可能需要几分钟的时间,不要关闭此窗口,请耐心等待。。。\n")basedir = sys.argv[0][:-12] # exe文件所在的目录# 遍历红目录print('开始生成红色位图')TraverseRed(basedir)print('红色位图生成完毕。。\n')# 遍历绿目录print('开始生成绿色位图')TraverseGreen(basedir)print('绿色位图生成完毕。。\n')# 遍历合并目录print('开始合并红、绿位图')TraverseMerge(basedir)print('位图合并完毕。。\n')print('转化完成!!!\n')os.system("pause")
Python PIL库对阻挡文件blk进行解析,生成红绿色位图相关推荐
- python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤
字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括: ...
- 使用Python PIL库中的Image.thumbnail函数裁剪图片
发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了.那么,我们如何使用python中强大的PIL库来进行图片裁剪呢? from PIL impo ...
- python PIL库安装
python编程用到图像有时会出现 decoder jpeg not available 那是因为没有装jpeg编解码库或者是python的PIL库安装不正确. 出现这种情况最好删掉PIL库(进入py ...
- python PIL库将图片转换成字符画
将图片转换成文本文件查看形式 准备 源码 原始图像 生成文本文件后显示的结果 注意事项 准备 语言:python 环境:PIL库,准备好图片素材 源码 from PIL import Image as ...
- 使用Python PIL库实现简单验证码的去噪处理
想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括:将彩色图片转换成灰度图.将灰度图二值化和去除噪点三个基本过程.这里仅以比较简单的验证码为例, ...
- Python标准库判断图片文件和声音文件的格式
每种文件都有自己独特的文件头结构和数据组织形式,这些都会在specification中进行详细说明和描述. GIF文件的头结构比较简单,前4个字节是GIF8,例如: 但是其他图片文件的结构就复杂很多了 ...
- python 中文姓名库,Python Requests库上传文件中文文件名处理方法是什么
使用Python Requests库,提交POST请求上传文件,不支持中文文件名? 使用Python Requests库,向微信服务器上传媒体问题. 当使用英文文件名称,上传时,一切OK. 当下面代码 ...
- Python PIL库 安装
PIL库:图像处理库 1.确保安装Python后,按Win+R打开运行输入cmd,打开终端 2.安装PIL,终端操作 pip install Pillow 如果安装出问题,就更新pip,之后再重复pi ...
- Python 标准库之 xml.etree.ElementTree xml解析
Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...
- python标准库os的方法listdir_使用python标准库快速修改文件名字
大家在追剧的时候会一次性下载很多电影,但是很烦人的是前面会有很多电影网站的广告前缀. 今天我将介绍一个简短的代码,快速修改这些文件的名字. 工具:os 首先在电影目录下新建一个py文件,并导入os i ...
最新文章
- idea设置类注释和方法注释
- Java的知识点9——this关键字
- UA OPTI570 量子力学 恒等算符在算符计算中的应用
- 直升机和固定翼实操期末考试
- BIOS功能调用之滚屏与清屏
- 【2016年第5期】位置大数据在车辆保险风险管理中的应用
- java字典类_Java字典类
- 水很深的深度学习-Task02机器学习基础
- 修改本地数据库root权限密码
- c语言写俄罗斯方块(源码)
- spss-多元线性回归分析
- Tesla M40 24G 在Win11上的双显卡显示实现、改风冷
- Java Web三大组件
- 可以上qq不能上网页的解决办法
- 用pygame做一个简单的python小游戏---生命游戏
- (4)直线的生成之中点画线法
- echart实现地图的逐级钻取
- 创建 spring MVC项目的基本步骤
- 超简单的Android圆形进度条
- 软件测试中的树莓酱定律
热门文章
- Zookeeper-Paxos-屁民的故事-内含视频讲解
- 2019年中国计算机学会(CCF)推荐国际学术会议-计算机网络(2019.04.25)
- Windows 7装机必备 - 主流品牌驱动大集合
- CentOS 基础知识与命令总结
- 星期一到星期日的英文_缩写_读音_巧记方法
- 星期一到星期日的英文 缩写 读音 巧记方法
- windows xp 安装python3.4.4(xp最高支持到3.4.4,后续版本不支持)
- c++编写断点续传和多线程下载模块【转】
- Android CoordinatorLayout Behavior
- Godot特效:手绘贴图+粒子系统实现风格化火焰(一)绘制火焰贴图