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数据结构树和二叉树简介
Apr 29 Python
Python基类函数的重载与调用实例分析
Jan 12 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
python Opencv将图片转为字符画
Feb 19 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
python3使用matplotlib绘制散点图
Mar 19 Python
python实现从本地摄像头和网络摄像头截取图片功能
Jul 11 Python
python下载库的步骤方法
Oct 12 Python
python爬虫请求头设置代码
Jul 28 Python
python中pycryto实现数据加密
Apr 29 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
Symfony数据校验方法实例分析
2015/01/26 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
php源码的使用方法讲解
2019/09/26 PHP
jquery animate 动画效果使用说明
2009/11/04 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
Python的UTC时间转换讲解
2019/02/26 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
怎样从/向数据文件读/写结构
2014/11/23 面试题
车辆安全检查制度
2014/01/12 职场文书
父母对孩子的寄语
2014/04/09 职场文书
大学生励志演讲稿
2014/04/25 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
go xorm框架的使用
2021/05/22 Golang
Javascript的promise,async和await的区别详解
2022/03/24 Javascript
Python中time标准库的使用教程
2022/04/13 Python