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读取Android permission文件
Nov 01 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
Nov 14 Python
python实现趣味图片字符化
Apr 30 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
python openpyxl使用方法详解
Jul 18 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
Django 5种类型Session使用方法解析
Apr 29 Python
Python selenium实现断言3种方法解析
Sep 08 Python
Python urllib3软件包的使用说明
Nov 18 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 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
yii2使用ajax返回json的实现方法
2016/05/14 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
python实现查询苹果手机维修进度
2015/03/16 Python
详解Python进程间通信之命名管道
2017/08/28 Python
Python遍历numpy数组的实例
2018/04/04 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
环保建议书
2014/03/12 职场文书
核心价值观演讲稿
2014/05/13 职场文书
创先争优活动承诺书
2014/08/30 职场文书
导游词之太湖
2019/10/08 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
七个非常实用的Python工具包总结
2021/06/15 Python
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android