python 学习(二)处理图片、TXT文档

一、尝试实现场景:将一个txt文档内容读到程序的数组内

1、新建一个文档 array.txt,写入内容 ,如:

              

2、使用命令行读取:

   1)在上述新建文档位置相同目录下打开命令提示窗

  2)打开文件,读入变量line中,打印可查看结果

  3)不知道上述命令怎么办? 百度python怎么读txt 或查看官方文档、教程

3、使用文件读取,在新建文档同级目录下新建 rtext.py文件,编写代码:

import numpy as np
filename = 'array.txt' # txt文件和当前脚本在同一目录下,所以不用写具体路径
pos = []
Efield = []
with open(filename, 'r') as file_to_read:
    while True:
        lines = file_to_read.readline() # 整行读取数据
        if not lines:
            break
    # 将整行数据分割处理,如果分割符是空格,括号里就不用传入参数,如果是逗号,则传入‘,'字符。
        p_tmp, E_tmp = [float(i) for i in lines.split()]
        pos.append(p_tmp)  # 添加新读取的数据
        Efield.append(E_tmp)
        pass
    pos = np.array(pos) # 将数据从list类型转换为array类型。
    Efield = np.array(Efield)
    pass
print(pos)
print(Efield)

执行如下:

 

 成功将文档内容写入数据中。接下来可编程处理。处理完成后写入txt。写入使用 file.write("要写入的内容") 即可

4、将文本中的文字转换为图片,需要安装图片插件这里用PILLOW,命令行输入 pip install pillow 安装完成后,新建一个gxh.txt,写入要生成图片的文本

 

 新建 t2p.py文件,插入以下代码

import os
from PIL import Image, ImageFont, ImageDraw
#import numpy as np

filename = 'gzh.txt'
  #(100,50)设置图片大小,(255,255,255)设置图片背景钯
font = ImageFont.truetype(os.path.join("fonts", "msyh.ttf"), 20)#设置字体
pos = []
with open(filename, 'r') as file_to_read:
    while True:
        lines = file_to_read.readline() # 整行读取数据
        if not lines:
            break
    # 将整行数据分割处理,如果分割符是空格,括号里就不用传入参数,如果是逗号,则传入‘,'字符。
        p_tmp = [str(i) for i in lines.split()]        
        pos.append(p_tmp)  # 添加新读取的数据        
        pass
    #pos = np.array(pos) # 将数据从list类型转换为array类型。  
    pass

for text in pos:
    im = Image.new("RGB", (150, 30), (255, 255, 255))
    dr = ImageDraw.Draw(im)  
    text=''.join(text)
    dr.text((10, 3),text, font=font, fill="#000000")    
    im.show()
    im.save("%s.png"%text)     

命令框输入 python p2t.py,在同目录下生成五张图片,txt文件中一行字符一张图片。

 

 5、使用图形界面输入文本,生成验证码图片,执行效果如下:

 

 新建txt2pic.py文件并插入如下代码:

from PIL import Image, ImageDraw, ImageFont, ImageFilter #导入图片需要库
from tkinter import *   #Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用
import tkinter.messagebox as messagebox
import random,os,PIL

#图片对象
class Rndpic():
    # 随机颜色1:
    def rndColor(self):
        return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
        # 随机颜色2:
    def rndColor2(self):
        return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))
        
    def drwRndpic(self,txt):
        # 240 x 60:
        width = 60 * 4
        height = 60
        image = PIL.Image.new('RGB', (width, height), (255, 255, 255))        
        # 创建Font对象:
        font = ImageFont.truetype(os.path.join("fonts", "msyh.ttf"), 45)
        # 创建Draw对象:
        draw = ImageDraw.Draw(image)
        # 填充每个像素:
        for x in range(width):
            for y in range(height):
                draw.point((x, y), fill=self.rndColor())
        # 输出文字        for t in range(len(txt)):
            draw.text((60 * t + 10, 5), txt[t], font=font, fill=self.rndColor2())  #修改text[t]yl rndChar()为生成随机数
        # 模糊:
        image = image.filter(ImageFilter.BLUR)
        # 显示并保存图片
        image.show()
        image.save(txt+'.jpg', 'jpeg')


class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

#生成界面 提示、输入框、执行、退出按键
    def createWidgets(self):
        self.Label = Label(self, text='please 4 char:')
        self.Label.pack()
        self.txtInput = Entry(self)
        self.txtInput.pack()
        self.alertButton = Button(self, text='生成图片', command=self.t2p)
        self.alertButton.pack()
        self.quitButton = Button(self, text='Quit', command=self.quit)
        self.quitButton.pack()

#定义生成图片函数       
    def t2p(self):
        txt = self.txtInput.get() or 'null'
        rndpic = Rndpic()
        draw = rndpic.drwRndpic(txt)


app = Application()
# 设置窗口标题:
app.master.title('Hello World')
# 主消息循环:
app.mainloop()

6.打包项目,生成个人小工具:

    在上面txt2pic.py文件目录下打开命令提示窗输入 pyinstaller -F txt2pic.py 打包文件,在生成的dist文件平下找到txt2pic.exe,双击执行即可完成个人图片生成小工具.

 

总结: 1.图形界面后续学习,现在界面超丑

     2.图片只显示4位字符,可修改程序图片大小的设置内容增加通用性

   3.画图功能后续学习,初学本案例图片太简陋

 

posted @ 2020-07-09 16:33  hyw45  阅读(455)  评论(0)    收藏  举报