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搭建虚拟环境的步骤详解
Sep 27 Python
定制FileField中的上传文件名称实例
Aug 23 Python
opencv python 2D直方图的示例代码
Jul 20 Python
对python Tkinter Text的用法详解
Oct 11 Python
python调用matlab的m自定义函数方法
Feb 18 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
python3.x中安装web.py步骤方法
Jun 23 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
Nov 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
一个查看session内容的函数
2006/10/09 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
php实现将Session写入数据库
2015/07/26 PHP
PHP常用技巧汇总
2016/03/04 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
jQuery拖动图片删除示例
2013/05/10 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
kali中python版本的切换方法
2019/07/11 Python
关于Python-faker的函数效果一览
2019/11/28 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
介绍下Lucene建立索引的过程
2016/03/02 面试题
教师个人的自我评价分享
2014/01/02 职场文书
十八大报告观后感
2014/01/28 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
农村老人去世追悼词
2015/06/23 职场文书
MySQL连接控制插件介绍
2021/09/25 MySQL
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
Python安装使用Scrapy框架
2022/04/12 Python
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL