python小工具—图片转为字符txt

图片转为字符txt

  • python小工具—图片转为字符txt
  • 效果展示
  • 转换图片信息
  • 图片信息转字符
  • 完整代码

效果展示

转换图片信息

将图片的rgb色彩信息转为灰度值,再通过替换灰度值对应的字符信息。

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")def get_char(r, g, b, alpha=256):if alpha == 0:return ' 'length = len(ascii_char)# 将RGB值转为灰度值 gray,灰度值范围为0-255gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)# 灰度值范围为0-255, 而字符集只有 70# 需要进行如下处理才能将灰度值映射到指定的字符上unit = (256.0 + 1) / length# 返回灰度值对应的字符return ascii_char[int(gray / unit)]

图片信息转字符

将图片的长宽假设为文本中的行数据,将图片的每一行单位依次转换为字符并输出。

def convert_pictures(img):# 打开并调整图片的宽和高im = Image.open(img)WIDTH = im.size[0]HEIGHT = im.size[1]im = im.resize((WIDTH, HEIGHT), Image.NEAREST)txt = ""for i in range(0, HEIGHT, coefficient):for j in range(0, WIDTH, coefficient):# 将(j, i)坐标的 RGB 像素转为字符后添加到txt字符串txt += get_char(*im.getpixel((j, i)))txt += '  '# 遍历完一行后需要增加换行符txt += '\n'print(txt)

完整代码

结合tkinter制作UI工具,完善工具。

import os
import threading
import tkinter as tk
from tkinter import END
from tkinter import filedialogfrom PIL import Imageascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
coefficient = 1  # 缩放系数 1为无缩放,2为缩小2倍def thread_it(func, *args):"""将函数打包进线程"""# 创建t = threading.Thread(target=func, args=args)# 守护 !!!t.setDaemon(True)# 启动t.start()# 阻塞--卡死界面!# t.join()class GUI:def __init__(self):self.root = tk.Tk()self.root.title("DDPl图片转字符串画")self.root.configure(bg='#2c3038')self.root.option_add('*Font', '楷体')# self.root.geometry("500x200+1100+150")# 程序运行时在屏幕中间打开sw = self.root.winfo_screenwidth()sh = self.root.winfo_screenheight()ww = 1055wh = 580x = (sw - ww) / 2y = (sh - wh) / 3self.root.geometry("%dx%d+%d+%d" % (ww, wh, x, y))self.root.resizable(False, False)self.root.update()self.root.wm_attributes('-topmost', 1)self.interface()def interface(self):self.w1 = tk.Entry(self.root, textvariable='请输入目标路径', bg='#25272c', fg='#b2b2b2')self.w1.grid(row=0, column=0, columnspan=3, ipadx=210, ipady=8, padx=10, pady=10)self.Button1 = tk.Button(self.root, text="选择目标文件", command=lambda: thread_it(self.event_选择目标文件), width=10,bg='#4780ac', fg='#d9f5ff', activebackground='#4d535f', activeforeground='#fdfdfd')self.Button1.grid(row=0, column=3, ipadx=20, ipady=10, padx=5, pady=10)self.Button2 = tk.Button(self.root, text="转换字符图片", command=lambda: thread_it(self.event_转换字符图片), width=10,bg='#4a8e53', fg='#d9f5ff', activebackground='#4d535f', activeforeground='#fdfdfd')self.Button2.grid(row=0, column=4, ipadx=20, ipady=10, padx=5, pady=10)self.Button3 = tk.Button(self.root, text="清空输出信息", command=lambda: thread_it(self.event_清空输出信息), width=10,bg='#2c3038', fg='#d9f5ff', activebackground='#4d535f', activeforeground='#fdfdfd')self.Button3.grid(row=0, column=5, ipadx=20, ipady=10, padx=5, pady=10)self.text = tk.Text(self.root, bg='#25272c', fg='#777c8a')self.text.grid(row=1, column=0, columnspan=6, ipadx=195, ipady=50, padx=10, pady=10)# 新建滚动条self.scroll = tk.Scrollbar()# 两个控件关联self.scroll.config(command=self.text.yview)self.text.config(yscrollcommand=self.scroll.set)def event_选择目标文件(self):path_ = filedialog.askopenfilename(filetypes=[("图片", [".jpg", ".png", ".jpeg"])])if path_ == "":self.w1.get()else:path_ = path_.replace("/", "\\")  # 实际在代码中执行的路径为“\“ 所以替换一下print(path_)self.w1.delete(0, END)self.w1.insert(0, path_)def event_转换字符图片(self):try:data_path = self.w1.get()if data_path is not None:self.convert_pictures(data_path)except Exception as e:self.text.insert(tk.INSERT, "   " + str(e) + '\n')self.text.see(END)print(e)def event_清空输出信息(self):try:self.text.delete('1.0', END)except Exception as e:print(e)passdef convert_pictures(self, img):# 打开并调整图片的宽和高im = Image.open(img)WIDTH = im.size[0]HEIGHT = im.size[1]im = im.resize((WIDTH, HEIGHT), Image.NEAREST)txt = ""for i in range(0, HEIGHT, coefficient):for j in range(0, WIDTH, coefficient):# 将(j, i)坐标的 RGB 像素转为字符后添加到txt字符串txt += self.get_char(*im.getpixel((j, i)))txt += '  '# 遍历完一行后需要增加换行符txt += '\n'self.text.insert(tk.INSERT, txt)self.text.see(END)print(txt)# 获取文件目录de_path = os.path.dirname(img)# 获取文件名de_name = os.path.basename(img)with open(de_path + "//" + de_name + ".txt", 'a+') as f:f.write(txt)self.text.insert(tk.INSERT, "已在图片文件夹下生成字符图txt..." + '\n')self.text.see(END)def get_char(self, r, g, b, alpha=256):if alpha == 0:return ' 'length = len(ascii_char)# 将RGB值转为灰度值 gray,灰度值范围为0-255gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)# 灰度值范围为0-255, 而字符集只有 70# 需要进行如下处理才能将灰度值映射到指定的字符上unit = (256.0 + 1) / length# 返回灰度值对应的字符return ascii_char[int(gray / unit)]if __name__ == "__main__":a = GUI()a.root.mainloop()

python小工具—图片转为字符txt相关推荐

  1. 【Python小工具】若干图片合并生成动态图(.gif)

    相信很多学生党.上班族在日常的学习.科研.办公中总会有一些比较特殊的需求,本人作为一个理工科(非计算机相关专业)学生和大家一样.有时好不容易找到了比较心仪的工具,却发现还要收费,质量和使用的便捷性也不 ...

  2. Python 利用PIL将图片转为字符

    Python 利用PIL将图片转为字符 PIL(Python Imaging Library)是Python语言的一个图像处理库,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,而 ...

  3. Python小工具-证件照图片处理-缩放、灰度、换底色

    Python小工具-证件照图片处理-缩放.灰度.换底色 参考链接: 20行代码教你用python给证件照换底色 import cv2 import numpy as np img = cv2.imre ...

  4. 自己整理实现的python小工具

    文章目录 记录一些自己整理实现的python小工具 python获取文件路径 pytho使用opencv进行图像拼接 记录一些自己整理实现的python小工具 python获取文件路径 因为有的程序需 ...

  5. python小工具myqr生成动态二维码

    python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...

  6. 自制python小工具(3)——Gadgets1.1

    自制python小工具(3)--Gadgets 1.1 文章目录 自制python小工具(3)--Gadgets 1.1 1. 前言 2. 功能实现 2.1 主程序界面 2.1.1 标签与按钮 2.1 ...

  7. Python小工具之翻译词典

    Python小工具之翻译词典 功能实现:请求网易有道词典的接口,获取翻译结果 代码如下: # -*- coding:utf-8 -*- """ Python制作翻译词典 ...

  8. 自己写个小工具——图片水印生成器

    自己写个小工具--图片水印生成器 自己写个小工具--图片水印生成器 介绍 安装 使用说明 其他 TODO LIST 介绍 做技术好几年了,最近想总结一下,写了几篇文章,不过发现经常有转载的地方,所以想 ...

  9. python小工具之pdf转excel

    python小工具记录 #xlwt只支持后缀xls文件 不支持xlxs文件 #openpyxl不支持xls文件 支持xlxs文件 import pdfplumber import xlwt wb = ...

最新文章

  1. Ubuntu搭建git服务器,外网可访问
  2. 【论文解读】通过知识蒸馏促进轻量级深度估计
  3. 百米路由器2登陆地址_腾达无线路由器怎么安装,真的不错
  4. kafka监听topic消费_分布式专题|最近一直死磕kafka设计原理,都肝吐了
  5. ucos实时操作系统应用开发流程
  6. [tf] config.gpu_options.allow_growth=True
  7. EBS_FORM_开发:关于切换不同BLOCK的时候弹出需要保存的窗口
  8. SolarWinds 攻击者开发的新后门 FoggyWeb
  9. 图像仿射变换 图像平移 python实现
  10. spring Boot 学习(一、Spring Boot与缓存)
  11. HDU3032_NimOrNotNim解题报告
  12. 记仇表情包在线生成源码
  13. ckplayer 网页视频播放插件
  14. 信息流优化中,甲乙双方以及媒体的那点事
  15. CBNetworking AFN的封装,别出心裁
  16. Python 批量给图片添加水印小工具
  17. python 爬取歌曲程序_如何让程序像人一样的去批量下载歌曲?Python爬取付费歌曲...
  18. java定时器整点报时_单片机 整点报时 定时小闹钟程序
  19. 第六章 软件层之AGDI下载程序接口
  20. python-django的JsonResponse返回中文数据编码问题

热门文章

  1. redis发布/订阅模式
  2. excel利用宏自动复制来自其他excel文件的数据
  3. MySQL高可用架构-MMM环境部署记录
  4. 笔记本计算机待机后显示器,笔记本电脑休眠后一直黑屏怎么回事_笔记本休眠后屏幕一直黑屏无法唤醒如何解决-win7之家...
  5. Java第二次实训课堂
  6. 个人微信公众号——定位策略
  7. 良心推荐:某音上最厉害的明日之后房子蓝图设计师都在这里了
  8. 全局zomm缩放后echarts鼠标偏移的问题(鼠标触发提示框位置有偏差)
  9. linux gdb 跳出函数,gdb调试程序时跳进函数和跳出函数
  10. 【有利可图网】PS实战教程25:巧用PS设计制作滑落一半的海报