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的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
详解Python中的Cookie模块使用
Jul 06 Python
详解Python中的array数组模块相关使用
Jul 05 Python
详解python 发送邮件实例代码
Dec 22 Python
Python3实现购物车功能
Apr 18 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 Python
简单了解python字符串前面加r,u的含义
Dec 26 Python
python标准库OS模块详解
Mar 10 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
Pandas数据类型之category的用法
Jun 28 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生成html文件方法总结
2014/12/01 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
自行车租赁公司创业计划书
2014/01/28 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
立项申请报告范本
2015/05/15 职场文书
谢师宴学生致辞
2015/07/27 职场文书
2019各种保证书范文
2019/06/24 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android