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 tkinter模块中类继承的三种方式分析
Aug 08 Python
Python 文件操作的详解及实例
Sep 18 Python
Python numpy 点数组去重的实例
Apr 18 Python
python递归函数绘制分形树的方法
Jun 22 Python
pycharm修改界面主题颜色的方法
Jan 17 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
python中如何使用虚拟环境
Oct 14 Python
Python中json.dumps()函数的使用解析
May 17 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
透析PHP的配置文件php.ini
2006/10/09 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
destoon二次开发入门示例
2014/06/20 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
浅析node.js中close事件
2014/11/26 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
2016/06/08 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
RC4文件加密的python实现方法
2015/06/30 Python
Python占用的内存优化教程
2019/07/28 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
python三引号如何输入
2020/07/06 Python
python简单实现9宫格图片实例
2020/09/03 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
小学生元旦广播稿
2014/02/21 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
详解CSS故障艺术
2021/05/25 HTML / CSS
PHP中strval()函数实例用法
2021/06/07 PHP