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和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
[原创]教女朋友学Python(一)运行环境搭建
Nov 29 Python
Python使用crontab模块设置和清除定时任务操作详解
Apr 09 Python
python实现低通滤波器代码
Feb 26 Python
Python中私有属性的定义方式
Mar 05 Python
django orm模块中的 is_delete用法
May 20 Python
用Python开发app后端有优势吗
Jun 29 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
Dec 01 Python
用PYTHON去计算88键钢琴的琴键频率和音高
Apr 10 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中static关键字原理的学习研究分析
2011/07/18 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
jquery实用代码片段集合
2010/08/12 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
详解Python进程间通信之命名管道
2017/08/28 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
幼儿园毕业家长感言
2014/02/10 职场文书
公司请假条格式
2014/04/11 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
先进事迹材料范文
2014/12/29 职场文书
董事长岗位职责
2015/02/13 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
英语读书笔记
2015/07/02 职场文书