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常用模块介绍
Nov 21 Python
浅析python协程相关概念
Jan 20 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
python 日期排序的实例代码
Jul 11 Python
Django urls.py重构及参数传递详解
Jul 23 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 Python
python实现飞机大战项目
Mar 11 Python
Python PIL库图片灰化处理
Apr 07 Python
初学者学习Python好还是Java好
May 26 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
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
php中使用websocket详解
2016/09/23 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
页面版文本框智能提示JS代码
2009/11/20 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
js style动态设置table高度
2014/10/21 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
vue超时计算的组件实例代码
2018/07/09 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
Python lambda和Python def区别分析
2014/11/30 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
最新pycharm安装教程
2020/11/18 Python
就业推荐表自我鉴定
2013/10/29 职场文书
学校运动会加油词
2015/07/18 职场文书
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
选购到合适的激光打印机
2022/04/21 数码科技