# -*- 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进行解析,生成红绿色位图相关推荐

  1. python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤

    字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括: ...

  2. 使用Python PIL库中的Image.thumbnail函数裁剪图片

    发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了.那么,我们如何使用python中强大的PIL库来进行图片裁剪呢? from PIL impo ...

  3. python PIL库安装

    python编程用到图像有时会出现 decoder jpeg not available 那是因为没有装jpeg编解码库或者是python的PIL库安装不正确. 出现这种情况最好删掉PIL库(进入py ...

  4. python PIL库将图片转换成字符画

    将图片转换成文本文件查看形式 准备 源码 原始图像 生成文本文件后显示的结果 注意事项 准备 语言:python 环境:PIL库,准备好图片素材 源码 from PIL import Image as ...

  5. 使用Python PIL库实现简单验证码的去噪处理

    想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括:将彩色图片转换成灰度图.将灰度图二值化和去除噪点三个基本过程.这里仅以比较简单的验证码为例, ...

  6. Python标准库判断图片文件和声音文件的格式

    每种文件都有自己独特的文件头结构和数据组织形式,这些都会在specification中进行详细说明和描述. GIF文件的头结构比较简单,前4个字节是GIF8,例如: 但是其他图片文件的结构就复杂很多了 ...

  7. python 中文姓名库,Python Requests库上传文件中文文件名处理方法是什么

    使用Python Requests库,提交POST请求上传文件,不支持中文文件名? 使用Python Requests库,向微信服务器上传媒体问题. 当使用英文文件名称,上传时,一切OK. 当下面代码 ...

  8. Python PIL库 安装

    PIL库:图像处理库 1.确保安装Python后,按Win+R打开运行输入cmd,打开终端 2.安装PIL,终端操作 pip install Pillow 如果安装出问题,就更新pip,之后再重复pi ...

  9. Python 标准库之 xml.etree.ElementTree xml解析

    Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...

  10. python标准库os的方法listdir_使用python标准库快速修改文件名字

    大家在追剧的时候会一次性下载很多电影,但是很烦人的是前面会有很多电影网站的广告前缀. 今天我将介绍一个简短的代码,快速修改这些文件的名字. 工具:os 首先在电影目录下新建一个py文件,并导入os i ...

最新文章

  1. idea设置类注释和方法注释
  2. Java的知识点9——this关键字
  3. UA OPTI570 量子力学 恒等算符在算符计算中的应用
  4. 直升机和固定翼实操期末考试
  5. BIOS功能调用之滚屏与清屏
  6. 【2016年第5期】位置大数据在车辆保险风险管理中的应用
  7. java字典类_Java字典类
  8. 水很深的深度学习-Task02机器学习基础
  9. 修改本地数据库root权限密码
  10. c语言写俄罗斯方块(源码)
  11. spss-多元线性回归分析
  12. Tesla M40 24G 在Win11上的双显卡显示实现、改风冷
  13. Java Web三大组件
  14. 可以上qq不能上网页的解决办法
  15. 用pygame做一个简单的python小游戏---生命游戏
  16. (4)直线的生成之中点画线法
  17. echart实现地图的逐级钻取
  18. 创建 spring MVC项目的基本步骤
  19. 超简单的Android圆形进度条
  20. 软件测试中的树莓酱定律

热门文章

  1. Zookeeper-Paxos-屁民的故事-内含视频讲解
  2. 2019年中国计算机学会(CCF)推荐国际学术会议-计算机网络(2019.04.25)
  3. Windows 7装机必备 - 主流品牌驱动大集合
  4. CentOS 基础知识与命令总结
  5. 星期一到星期日的英文_缩写_读音_巧记方法
  6. 星期一到星期日的英文 缩写 读音 巧记方法
  7. windows xp 安装python3.4.4(xp最高支持到3.4.4,后续版本不支持)
  8. c++编写断点续传和多线程下载模块【转】
  9. Android CoordinatorLayout Behavior
  10. Godot特效:手绘贴图+粒子系统实现风格化火焰(一)绘制火焰贴图