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实现的解析crontab配置文件代码
Jun 30 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
Python编程之string相关操作实例详解
Jul 22 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
pip命令无法使用的解决方法
Jun 12 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 Python
关于 Python json中load和loads区别
Nov 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
多个PHP中文字符串截取函数
2013/11/12 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
Cookie 注入是怎样产生的
2009/04/08 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
js 通用订单代码
2013/12/23 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
js解决movebox移动问题
2016/03/29 Javascript
Three.js基础部分学习
2017/01/08 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
在Python中实现贪婪排名算法的教程
2015/04/17 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
Python3+Appium安装使用教程
2019/07/05 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
python中的插入排序的简单用法
2021/01/19 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
幼儿园庆元旦主持词
2015/07/06 职场文书
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
Python加密与解密模块hashlib与hmac
2022/06/05 Python