Python tkinter canvas实现图片裁剪

2021-03-21 22:24

阅读:587

标签:reg   bin   右键   矩形   文件   src   class   format   gif   

实现: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(, left_mouse_down)  # 鼠标左键按下
    canvas.bind(, left_mouse_up)  # 鼠标左键释放
    canvas.bind(, right_mouse_down)  # 鼠标右键按下
    canvas.bind(, right_mouse_up)  # 鼠标右键释放
    canvas.bind(, moving_mouse)  # 鼠标左键按下并移动
    win.mainloop()

原图one.png

技术图片

 运行

技术图片

 技术图片

one_corp.png

技术图片

 

Python tkinter canvas实现图片裁剪

标签:reg   bin   右键   矩形   文件   src   class   format   gif   

原文地址:https://www.cnblogs.com/rainbow-tan/p/13898131.html


评论


亲,登录后才可以留言!