pickle和pillow基础使用

 

1.pickle模块

python的pickle模块实现了基本的数据序列化和反序列化。(序列化即将对象用二进制表示)过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

函数pickle.dump(obj, file, [, protocol])

将对象obj保存到文件file中。

函数pickle.load(file)

从字节流中回复一个对象

import pickle
f = open('somedata.pkl', 'wb')
pickle.dump([1, 2, 3, 4], f)
pickle.dump('hello', f)
pickle.dump({'Apple', 'Pear', 'Banana'})
f.close()

pickle不能处理超过4G.

 

2.pillow模块

使用 Image 类

PIL最重要的类是 Image class, 你可以通过多种方法创建这个类的实例;你可以从文件加载图像,或者处理其他图像, 或者从 scratch 创建。

打开图片,获取图片属性,显示图片示例。

图像和数组互相转换

%matplotlib inline


import matplotlib.pyplot as plt
from PIL import Image


import numpy as np
img = Image.open('crop001522.png')
img.thumbnail((64, 64), Image.ANTIALIAS)
print(img.format, img.size, img.mode)#PPM (512, 512) RGB
img_array = np.array(img)
im = Image.fromarray(np.uint8(img_array))
imgplot = plt.imshow(im)

 

读写、缩放图片示例

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(file)
    outfile = f + '.jpg'
    if omfo;e != outfile:
        try:
            Image.open(infile).save(outfile)
            
        except IOError:
            print('cannot convert ', infile)

缩放图像并另存为其他格式

import os, sys
from PIL import Image

size= (128, 128)

for infile in sys.argv[1]:
    outfile = os.path.splitext(infile)[0] + '.thumbnail'
    if infile != outfile:
        try:
            im = Image.open(infile)
            im.thumbnail(size)
            im.save(outfile, 'JPEG')
        except IOError:
            print('cannot create thumbnail for ', infile)

剪切,粘贴,合并图像

box = [100, 100, 400, 400]
region = im.crop(box)
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)

分离和合并颜色通道

r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))

简单几何变换

out = im.resize((128, 128))
out = im.rotate(45)

旋转图像,颜色变换

out = im.transpose(Image.FLIP_LEFT_RIGHT)
im = Image.open("lean.ppm").convert("L")

颜色增强,应用过滤器,点操作

from PIL import ImageFilter
out = im.filter(ImageFilter.DETAIL)
point_operation = im.point(lambda i: i*1.2)

处理个别bands

source = im.split()

R, G, B = 0, 1, 2
#如果i小鱼10返回255否则返回0

mask = source[R].point(lambda i: i < 100 and 255)

out = source[G].point(lambda I: i * 0.7)

source[G].paste(out, None, mask)
 
im = Image.merge(im.mode, source)

图像增强

一旦创建图像,可以通过ImageEnhance模块,调节亮度,对比度,颜色空间和锐化。

from PIL import ImageEnhance

enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show("30% more contrast")

python中不同模块读取图片的方法

参考:https://www.cnblogs.com/skyfsm/p/8276501.html

参考中文文档:https://pillow-cn.readthedocs.io/zh_CN/latest/handbook/tutorial.html

参考英文文档:https://pillow.readthedocs.io/en/stable/reference/Image.html?highlight=open

好的,我了解了你的问题。要实现用户登录和注册系统,需要以下步骤: 1. 创建一个GUI界面,使用tkinter库实现。 2. 在界面中添加登录和注册按钮,以及相应的输入框。 3. 实现验证码功能。可以使用Pillow库生成验证码图片,并将验证码和用户输入的验证码进行比较。 4. 将用户账号信息存在本地文件。可以使用pickle库将用户信息保存到本地文件中。 下面是一个简单的实现代码,你可以根据自己的需求进行修改: ```python import tkinter as tk from PIL import Image, ImageDraw, ImageFont import random import pickle class LoginSystem: def __init__(self): # 创建主窗口 self.root = tk.Tk() self.root.title("登录系统") # 创建输入框 self.username_label = tk.Label(self.root, text="用户名:") self.username_label.grid(row=0, column=0, padx=10, pady=10) self.username_entry = tk.Entry(self.root) self.username_entry.grid(row=0, column=1, padx=10, pady=10) self.password_label = tk.Label(self.root, text="密码:") self.password_label.grid(row=1, column=0, padx=10, pady=10) self.password_entry = tk.Entry(self.root, show="*") self.password_entry.grid(row=1, column=1, padx=10, pady=10) self.verifycode_label = tk.Label(self.root, text="验证码:") self.verifycode_label.grid(row=2, column=0, padx=10, pady=10) self.verifycode_entry = tk.Entry(self.root) self.verifycode_entry.grid(row=2, column=1, padx=10, pady=10) # 创建验证码图片 self.verifycode_image = self.create_verifycode_image() self.verifycode_photo = tk.PhotoImage(data=self.verifycode_image.tobytes()) self.verifycode_canvas = tk.Canvas(self.root, width=100, height=30) self.verifycode_canvas.create_image(50, 15, image=self.verifycode_photo) self.verifycode_canvas.grid(row=2, column=2, padx=10, pady=10) # 创建登录和注册按钮 self.login_button = tk.Button(self.root, text="登录", command=self.login) self.login_button.grid(row=3, column=0, padx=10, pady=10) self.register_button = tk.Button(self.root, text="注册", command=self.register) self.register_button.grid(row=3, column=1, padx=10, pady=10) # 运行主窗口 self.root.mainloop() def create_verifycode_image(self): # 生成验证码图片 width, height = 100, 30 image = Image.new("RGB", (width, height), (255, 255, 255)) draw = ImageDraw.Draw(image) font = ImageFont.truetype("arial.ttf", 20) code = ''.join(random.sample("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 4)) draw.text((10, 5), code, font=font, fill=(0, 0, 0)) del draw self.verifycode = code.lower() return image def login(self): # 登录功能实现 username = self.username_entry.get() password = self.password_entry.get() verifycode = self.verifycode_entry.get().lower() if verifycode == self.verifycode: with open("users.pkl", "rb") as f: users = pickle.load(f) if username in users and users[username] == password: print("登录成功!") else: print("用户名或密码错误!") else: print("验证码错误!") def register(self): # 注册功能实现 username = self.username_entry.get() password = self.password_entry.get() verifycode = self.verifycode_entry.get().lower() if verifycode == self.verifycode: with open("users.pkl", "rb") as f: users = pickle.load(f) if username in users: print("用户名已存在!") else: with open("users.pkl", "wb") as f: users[username] = password pickle.dump(users, f) print("注册成功!") else: print("验证码错误!") if __name__ == '__main__': LoginSystem() ``` 在这个代码中,我们使用Pillow库来生成验证码图片,并使用pickle库将用户信息保存到本地文件中。你可以根据自己的需求对代码进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值