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引用(import)文件夹下的py文件的方法
Aug 26 Python
Python标准库之多进程(multiprocessing包)介绍
Nov 25 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
Python2随机数列生成器简单实例
Sep 04 Python
Python3 模块、包调用&amp;路径详解
Oct 25 Python
python实现log日志的示例代码
Apr 28 Python
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
如何用六步教会你使用python爬虫爬取数据
Apr 06 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 快速生成 Flash 动画的方法
2007/03/06 PHP
php 判断数组是几维数组
2013/03/20 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
强制设为首页代码
2006/06/19 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
python 多线程重启方法
2019/02/18 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
岗位职责的含义
2013/11/17 职场文书
CNC数控操作工岗位职责
2013/11/19 职场文书
艺术设计专业个人求职信范文
2013/12/11 职场文书
英语专业学生的自我评价
2013/12/30 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
素质拓展感言
2014/01/29 职场文书
《菜园里》教学反思
2014/04/17 职场文书
食品安全宣传标语
2014/06/07 职场文书
小学生毕业评语
2014/12/26 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python