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 time模块用法实例详解
Sep 11 Python
Python中处理unchecked未捕获异常实例
Jan 17 Python
python实现比较两段文本不同之处的方法
May 30 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
python模块导入的细节详解
Dec 10 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
python list转置和前后反转的例子
Aug 26 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
Python常用扩展插件使用教程解析
Nov 02 Python
Django 实现图片上传和下载功能
Dec 31 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出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
php实现的mongodb操作类
2015/05/28 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
JS 事件绑定函数代码
2010/04/28 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
python开发中range()函数用法实例分析
2015/11/12 Python
python批量制作雷达图的实现方法
2016/07/26 Python
Python常见异常分类与处理方法
2017/06/04 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
详解python中的index函数用法
2019/08/06 Python
python dumps和loads区别详解
2020/02/04 Python
python实现FTP循环上传文件
2020/03/20 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
夜大毕业生自我评价分享
2013/11/10 职场文书
行政总监岗位职责
2013/12/05 职场文书
新娘父亲婚礼致辞
2014/01/16 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
文艺晚会开场白
2015/05/29 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记