Python tkinter canvas实现图片裁剪
Posted 南风丶轻语
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python tkinter canvas实现图片裁剪相关的知识,希望对你有一定的参考价值。
实现:tkinter 画布上显示图片,按下鼠标左键并且移动,实现截图
# -*- encoding=utf-8 -*- import os import tkinter as tk from PIL import Image from PIL import ImageTk left_mouse_down_x = 0 left_mouse_down_y = 0 left_mouse_up_x = 0 left_mouse_up_y = 0 sole_rectangle = None def left_mouse_down(event): # print(\'鼠标左键按下\') global left_mouse_down_x, left_mouse_down_y left_mouse_down_x = event.x left_mouse_down_y = event.y def left_mouse_up(event): # print(\'鼠标左键释放\') global left_mouse_up_x, left_mouse_up_y left_mouse_up_x = event.x left_mouse_up_y = event.y corp_img(img_path, \'img/one_corp.png\', left_mouse_down_x, left_mouse_down_y, left_mouse_up_x, left_mouse_up_y) def moving_mouse(event): # print(\'鼠标左键按下并移动\') global sole_rectangle global left_mouse_down_x, left_mouse_down_y moving_mouse_x = event.x moving_mouse_y = event.y if sole_rectangle is not None: canvas.delete(sole_rectangle) # 删除前一个矩形 sole_rectangle = canvas.create_rectangle(left_mouse_down_x, left_mouse_down_y, moving_mouse_x, moving_mouse_y, outline=\'red\') def right_mouse_down(event): # print(\'鼠标右键按下\') pass def right_mouse_up(event): # print(\'鼠标右键释放\') pass def corp_img(source_path, save_path, x_begin, y_begin, x_end, y_end): if x_begin < x_end: min_x = x_begin max_x = x_end else: min_x = x_end max_x = x_begin if y_begin < y_end: min_y = y_begin max_y = y_end else: min_y = y_end max_y = y_begin save_path = os.path.abspath(save_path) if os.path.isfile(source_path): corp_image = Image.open(source_path) region = corp_image.crop((min_x, min_y, max_x, max_y)) region.save(save_path) print(\'裁剪完成,保存于:{}\'.format(save_path)) else: print(\'未找到文件:{}\'.format(source_path)) if __name__ == \'__main__\': pass win = tk.Tk() frame = tk.Frame() frame.pack() screenwidth = win.winfo_screenwidth() screenheight = win.winfo_screenheight() img_path = \'img/one.png\' # img_path = \'img/bg.jpg\' # img_path = \'img/test.jpg\' # img_path = \'img/pic.gif\' image = Image.open(img_path) image_x, image_y = image.size if image_x > screenwidth or image_y > screenheight: print(\'The picture size is too big,max should in:{}x{}, your:{}x{}\'.format(screenwidth, screenheight, image_x, image_y)) img = ImageTk.PhotoImage(image) canvas = tk.Canvas(frame, width=image_x, height=image_y, bg=\'pink\') i = canvas.create_image(0, 0, anchor=\'nw\', image=img) canvas.pack() canvas.bind(\'<Button-1>\', left_mouse_down) # 鼠标左键按下 canvas.bind(\'<ButtonRelease-1>\', left_mouse_up) # 鼠标左键释放 canvas.bind(\'<Button-3>\', right_mouse_down) # 鼠标右键按下 canvas.bind(\'<ButtonRelease-3>\', right_mouse_up) # 鼠标右键释放 canvas.bind(\'<B1-Motion>\', moving_mouse) # 鼠标左键按下并移动 win.mainloop()
原图one.png
运行
one_corp.png
源码(https://github.com/rainbow-tan/rainbow/tree/master/%E8%A3%81%E5%89%AA%E5%9B%BE%E7%89%87)
以上是关于Python tkinter canvas实现图片裁剪的主要内容,如果未能解决你的问题,请参考以下文章
python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜
python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜
python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜
Python3 tkinter,怎么在Label/Canvas中插入图片?