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 getopt详解及简单实例
Dec 30 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
python3+PyQt5实现柱状图
Apr 24 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
Numpy中的mask的使用
Jul 21 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
python实现简单的井字棋
May 26 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 Python
Python Pandas常用函数方法总结
Jun 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 json 格式控制
2015/12/24 PHP
php bootstrap实现简单登录
2016/03/08 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
Js 本页面传值实现代码
2009/05/17 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
Python的另外几种语言实现
2015/01/29 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
python实现机器学习之多元线性回归
2018/09/06 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
python 中xpath爬虫实例详解
2019/08/26 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
制药工程专业毕业生推荐信
2013/12/24 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
python munch库的使用解析
2021/05/25 Python
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript