python,一个入门级极简单的图像处理工具(一)

python初学者,自己用python制作了一个极其简单的图像处理工具,仅仅包括本地图像的打开,坐标截图,大小尺寸改变,图像旋转,图像镜像,固定位置添加文字,简单几个滤镜,亮度、色彩度、对比度、锐度调整,恢复图片,对比图像。

先说一下大致思路,可视化窗口操作(采用tkinter库), 左侧时按钮区(每个按钮弹出操作界面),右侧是图片展示区。
在这里插入图片描述

由两个简单的python类构成,一个Win窗口类,一个picture图片处理类。另外,软件自身的图片处理主要采用pillow库处理,加上可视化窗口tkinter库,先在项目中导入两个库。因为tkinter窗口显示图片要求使用tkinter对象的图片,pillow处理图片使用pillow对象的图片,因而,Win窗口类中的图片全部为tkinter对象,picture类中为pillow对象,并在Win类的__init__()方法中设置self.picture作为picture类的实例化对象以及self.img作为窗口类中一直变动的PIL对象图片。

用到的库:

from PIL import Image as Im
from PIL import ImageTk
import tkinter as tk  # 导入 Tkinter 库
from tkinter.filedialog import askopenfilename
import tkinter.messagebox
import tkinter.ttk
import tkinter.messagebox
from PIL import ImageDraw
from PIL import ImageFont
from PIL import ImageEnhance
import style_Huminghao

Win类的__init__()方法(当然Win类继承tkinter类):

class Win(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('图像简易处理及滤镜工具')
        self.geometry('1080x720')
        self.picture = None  # self.picture将作为picture类的实例化对象
        self.img = None  # self.img将作为窗口类中一直变动的PIL对象图片
        self.setupUI()

然后是Win类中各种布局的方法,,,,,,:

    def setupUI(self):
        # 左边菜单栏
        left_f = tk.Frame(self, height=720, width=360)
        left_f.pack(side=tk.LEFT)

        # 各种功能按钮名称及位置
        btn1 = tk.Button(left_f, text='打开图像', command=self.openToshow)
        btn1.place(y=25, x=30, width=300, height=40)
        btn2 = tk.Button(left_f, text='截图', command=self.window_cut)
        btn2.place(y=85, x=30, width=144, height=60)
        btn3 = tk.Button(left_f, text='大小', command=self.window_size)
        btn3.place(y=85, x=186, width=144, height=60)
        btn4 = tk.Button(left_f, text='旋转', command=self.window_rotate)
        btn4.place(y=165, x=30, width=144, height=60)
        btn5 = tk.Button(left_f, text='镜像', command=self.window_mirror)
        btn5.place(y=165, x=186, width=144, height=60)
        btn6 = tk.Button(left_f, text='文字', command=self.window_word)
        btn6.place(y=245, x=30, width=144, height=60)
        btn7 = tk.Button(left_f, text='滤镜', command=self.window_style)
        btn7.place(y=245, x=186, width=144, height=60)

        # 各种调整名称及位置
        lb1 = tk.Label(left_f, text='亮 度:')
        lb1.place(y=355, x=55, width=60, height=30)
        self.inp1 = tk.Entry(left_f)
        self.inp1.place(y=355, x=105, width=90, height=30)
        lb2 = tk.Label(left_f, text='%')
        lb2.place(y=355, x=205, width=13, height=30)
        b1 = tk.Button(left_f, text='确定', width=8, command=self.brightnessPic)
        b1.place(y=359, x=240)

        lb3 = tk.Label(left_f, text='色彩度:')
        lb3.place(y=400, x=55, width=60, height=30)
        self.inp2 = tk.Entry(left_f)
        self.inp2.place(y=400, x=105, width=90, height=30)
        lb4 = tk.Label(left_f, text='%')
        lb4.place(y=400, x=205, width=13, height=30)
        b2 = tk.Button(left_f, text='确定', width=8, command=self.coolorPic)
        b2.place(y=404, x=240)

        lb5 = tk.Label(left_f, text='对比度:')
        lb5.place(y=445, x=55, width=60, height=30)
        self.inp3 = tk.Entry(left_f)
        self.inp3.place(y=445, x=105, width=90, height=30)
        lb6 = tk.Label(left_f, text='%')
        lb6.place(y=445, x=205, width=13, height=30)
        b3 = tk.Button(left_f, text='确定', width=8, command=self.contrastPic)
        b3.place(y=449, x=240)

        lb7 = tk.Label(left_f, text='锐 度:')
        lb7.place(y=490, x=55, width=60, height=30)
        self.inp4 = tk.Entry(left_f)
        self.inp4.place(y=490, x=105, width=90, height=30)
        lb8 = tk.Label(left_f, text='%')
        lb8.place(y=490, x=205, width=13, height=30)
        b4 = tk.Button(left_f, text='确定', width=8, command=self.sharpnessPic)
        b4.place(y=494, x=240)

        # 底部恢复、保存、对比
        btn8 = tk.Button(left_f, text='保存图像', command=self.save_pic)
        btn8.place(y=600, x=150, width=180, height=30)
        btn9 = tk.Button(left_f, text='恢复图像', command=self.replay)
        btn9.place(y=550, x=90)
        btn10 = tk.Button(left_f, text='对比图像', command=self.compare)
        btn10.place(y=550, x=170)

        # 右侧图像显示栏
        right_f = tk.Frame(self, height=720, width=720)
        right_f.pack(side=tk.RIGHT)
        self.image_l = tk.Label(right_f, relief='ridge')
        self.image_l.place(x=0, y=0, width=720, height=720)

每个功能按钮都将在窗口类中完成输入值获取与传输,以及图片展示;图片处理类只负责调用pillow处理图片。具体功能实现下一篇展示。

发布了4 篇原创文章 · 获赞 2 · 访问量 767
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览