python 实现图片裁剪小工具


Posted in Python onFebruary 02, 2021

完整项目地址下载: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 实现图片裁剪小工具

以上就是python 实现图片裁剪小工具的详细内容,更多关于python 图片裁剪的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python时间戳与时间字符串互相转换实例代码
Nov 28 Python
python实现数通设备tftp备份配置文件示例
Apr 02 Python
python持久性管理pickle模块详细介绍
Feb 18 Python
python中实现精确的浮点数运算详解
Nov 02 Python
Python二进制串转换为通用字符串的方法
Jul 23 Python
python实现操作文件(文件夹)
Oct 31 Python
python绘制无向图度分布曲线示例
Nov 22 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
Python3.9又更新了:dict内置新功能
Feb 28 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 #Python
Python datetime模块的使用示例
Feb 02 #Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 #Python
python中子类与父类的关系基础知识点
Feb 02 #Python
python中time包实例详解
Feb 02 #Python
python+playwright微软自动化工具的使用
Feb 02 #Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 #Python
You might like
第四节--构造函数和析构函数
2006/11/16 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
checkbox 复选框不能为空
2009/07/11 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
JS实现多功能计算器
2020/10/28 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
Python如何发送与接收大型数组
2020/08/07 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
酒店总经理工作职责
2013/12/13 职场文书
带薪年假请假条
2014/02/04 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
村班子对照检查材料
2014/08/18 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
汇报材料怎么写
2014/12/30 职场文书
保研导师推荐信
2015/03/25 职场文书
Nginx缓存设置案例详解
2021/09/15 Servers
Python 中 Shutil 模块详情
2021/11/11 Python