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异常和文件处理机制详解
Jul 19 Python
Python 3中的yield from语法详解
Jan 18 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
Jul 07 Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
使用python实现滑动验证码功能
Aug 05 Python
python实现猜拳小游戏
Apr 05 Python
pymysql的简单封装代码实例
Jan 08 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 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使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
js时间日期和毫秒的相互转换
2013/02/22 Javascript
js数组的操作详解
2013/03/27 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
python实现雨滴下落到地面效果
2018/06/21 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
pandas的排序和排名的具体使用
2019/07/31 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
法学专业毕业生自荐信范文
2013/12/18 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
工厂见习报告范文
2014/10/31 职场文书
小学优秀学生评语
2014/12/29 职场文书
培训督导岗位职责
2015/04/10 职场文书
修辞手法有哪些?
2019/08/29 职场文书