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利用beautifulSoup实现爬虫
Sep 29 Python
编写简单的Python程序来判断文本的语种
Apr 07 Python
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
Python基础篇之初识Python必看攻略
Jun 23 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
python调用并链接MATLAB脚本详解
Jul 05 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
Feb 11 Python
python模拟点击网页按钮实现方法
Feb 25 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 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
Search Engine Friendly的URL设计
2006/10/09 PHP
PHP 日期加减的类,很不错
2009/10/10 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
大学本科毕业生求职信范文
2013/12/18 职场文书
学习两会精神心得范文
2014/03/17 职场文书
2014年清明节寄语
2014/04/03 职场文书
活动倡议书范文
2014/05/13 职场文书
毕业大学生自荐信
2014/06/17 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
2014年租房协议书范本
2014/10/30 职场文书
邀请书模板
2015/02/02 职场文书
紧急迫降观后感
2015/06/15 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL