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

本文介绍了Python图像处理中遇到的对象问题和压缩问题。使用Tkinter获取图片并用Pillow处理,将Tkinter图片对象转换为Pillow对象进行保存。对于图片过大的情况,通过Pillow实现压缩。文章还提到了由于Opencv响应速度慢,未实现鼠标绑定截图功能。
摘要由CSDN通过智能技术生成

先来看本地图片的打开,因为本人新手入坑,是在遇到太多奇奇怪怪的问题,总结之后主要问题:1. tkinter与pillow的图片对象问题 2. 图片过大压缩问题

1. 对象问题:

Tkinter 以及pillow都可以打开图片,tkinter展示,pillow处理以及保存,且tkinter对象转pillow对象更加方便。所以采用tkinter获取本地地址,传值给picure类获取选定图片,传回Win类显示的方法,并在保存时将打开的tkinter图片对象转化为pillow对象保存。

Win类:

# 打开图片时使用,传值(图)给展示函数
    def openToshow(self):
        address = self.getAddress()
        self.open_picToimg = self.picture.open_pic(address)
        self.firstPic(self.open_picToimg)
        self.show_img(self.open_picToimg)
        
# 打开图片时使用,获得地址
    def getAddress(self):
        path = tk.StringVar()
        file_entry = tk.Entry(self, state='readonly', text=path)
        path_ = askopenfilename()
        path.set(path_)
        self.picture = picture()
        return file_entry.get()

# 展示函数
    def show_img(self, n_img):
        self.img = n_img  # self.img PIL对象方便传值给picture类以及本类中其他需要使用PIL图像的地方
        img_show = ImageTk.PhotoImage(self.img)
        self.image_l.config(image=img_show)
        self.image_l.image = img_show
        return self.img

# 保存函数
    def save_pic(self):
        fname = tkinter.filedialog.asksaveasfilename(title='保存文件', filetypes=[("PNG", ".png")])
        self.img.save(str(fname))  # PIL保存

pictire类:

# 打开图像调用
    def open_pic(self, address):
        self.pic_get = Im.open(address).convert('RGBA')
        wid, hei = self.pic_get.size
        if wid > 600 or hei > 400:
            if tk.messagebox.askokcancel('提示', '图片可能过大,是否压缩?'):
                needShow_pic = self.openResize()
                return needShow_pic
            return self.pic_get
        else:
            return self.pic_get

展示:

# 展示函数
    def show_img(self, n_img):
        self.img = n_img  # self.img PIL对象方便传值给picture类以及本类中其他需要使用PIL图像的地方
        img_show = ImageTk.PhotoImage(self.img)
        self.image_l.config(image=img_show)
        self.image_l.image = img_show
        return self.img

考虑之后的图片重置,这里需要Win类存有最开始的图片:

# 原图储存
    def firstPic(self, pic):
        self.Fpic = pic
        return self.Fpic
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值