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之有容乃大的list(1)
Sep 14 Python
python操作gmail实例
Jan 14 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
你所不知道的Python奇技淫巧13招【实用】
Dec 14 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
Django中的cookie和session
Aug 27 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
python基于tkinter实现gif录屏功能
May 19 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
各种战术和打法的原创者
2020/03/04 星际争霸
PHP Memcached应用实现代码
2010/02/08 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python用字典统计单词或汉字词个数示例
2014/04/22 Python
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
python进行TCP端口扫描的实现
2018/12/21 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
Python和Go语言的区别总结
2019/02/20 Python
python实现证件照换底功能
2019/08/20 Python
python根据时间获取周数代码实例
2019/09/30 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
阿拉伯世界最大的电子商务网站:Souq沙特阿拉伯
2016/10/28 全球购物
给国外客户的邀请函
2014/01/30 职场文书
求职简历自我评价范例
2014/03/12 职场文书
工商企业管理专业自荐信范文
2014/04/12 职场文书
物业管理专业求职信
2014/06/11 职场文书
会计主管岗位职责
2015/04/02 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
Java实现房屋出租系统详解
2021/10/05 Java/Android