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将html转成PDF的实现代码(包含中文)
Mar 04 Python
python字符串对其居中显示的方法
Jul 11 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
详解python编译器和解释器的区别
Jun 24 Python
对python中的*args与**kwgs的含义与作用详解
Aug 28 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
python numpy数组中的复制知识解析
Feb 03 Python
Python selenium实现断言3种方法解析
Sep 08 Python
python 密码学示例——凯撒密码的实现
Sep 21 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 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类常量的使用详解
2013/06/08 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
jquery JSON的解析方式
2009/07/25 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
pandas中Timestamp类用法详解
2017/12/11 Python
Python格式化输出%s和%d
2018/05/07 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
简单的Python调度器Schedule详解
2019/08/30 Python
python 实现绘制整齐的表格
2019/11/18 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
Python代码注释规范代码实例解析
2020/08/14 Python
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
网络教育自我鉴定
2014/02/04 职场文书
入党积极分子评语
2014/05/04 职场文书
质量承诺书格式
2014/05/20 职场文书
学校师德承诺书
2014/05/23 职场文书
模范班主任事迹材料
2014/12/17 职场文书
销售员岗位职责范本
2015/04/11 职场文书
元宵节晚会主持词
2015/07/01 职场文书
Python Django模型详解
2021/10/05 Python
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL