python 实现图片裁剪小工具

作者:南风丶轻语 时间:2022-04-27 18:15:15 

完整项目地址下载:https://github.com/rainbow-tan/rainbow/tree/master/%E8%A3%81%E5%89%AA%E5%9B%BE%E7%89%87

实现: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

python 实现图片裁剪小工具

 运行

python 实现图片裁剪小工具

python 实现图片裁剪小工具

one_corp.png

python 实现图片裁剪小工具

来源:https://www.cnblogs.com/rainbow-tan/p/13898131.html

标签:python,图片,裁剪,工具
0
投稿

猜你喜欢

  • Python个人博客程序开发实例信息显示

    2022-07-06 15:31:05
  • python操作MySQL 模拟简单银行转账操作

    2024-01-17 19:15:47
  • Python ArcPy实现批量拼接长时间序列栅格图像

    2021-09-07 18:48:53
  • js打开新窗口方法代码收集

    2007-09-05 19:20:00
  • Vue双向绑定原理及实现方法

    2024-05-10 14:16:55
  • python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)

    2024-01-13 15:19:57
  • Oracle将查询的结果放入一张自定义表中并再查询数据

    2024-01-24 18:23:56
  • python实现BP神经网络回归预测模型

    2023-01-21 17:53:44
  • python正则表达式的使用

    2023-07-21 07:42:15
  • 解析SQL语句中Replace INTO与INSERT INTO的不同之处

    2024-01-23 05:57:18
  • CentOS 7安装MySQL的详细步骤

    2024-01-25 19:59:17
  • php动态函数调用方法

    2023-11-15 00:18:30
  • python 爬虫爬取京东ps4售卖情况

    2022-05-19 01:35:28
  • asp如何在数据库中用好Transaction?

    2010-06-22 21:07:00
  • CSS鼠标悬停tip效果

    2007-08-26 17:32:00
  • SQL Server中选出指定范围行的SQL语句代码

    2024-01-28 08:39:14
  • Python标准库之数据库 sqlite3

    2024-01-24 01:50:51
  • Python3 操作 MySQL 插入一条数据并返回主键 id的实例

    2024-01-21 06:05:16
  • window.opener用法和用途实例介绍

    2024-04-17 10:38:13
  • 详解Python自动化中这八大元素定位

    2023-06-04 18:25:34
  • asp之家 网络编程 m.aspxhome.com