实现: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('', left_mouse_down) # 鼠标左键按下

canvas.bind('', left_mouse_up) # 鼠标左键释放

canvas.bind('', right_mouse_down) # 鼠标右键按下

canvas.bind('', right_mouse_up) # 鼠标右键释放

canvas.bind('', moving_mouse) # 鼠标左键按下并移动

win.mainloop()

原图one.png

运行

one_corp.png

以上就是python 实现图片裁剪小工具的详细内容,更多关于python 图片裁剪的资料请关注脚本之家其它相关文章!

python图片裁剪软件_python 实现图片裁剪小工具相关推荐

  1. python做游戏用什么软件_Python 与游戏测试 (小工具篇)

    最近在TesterHome游戏测试群里,有时候会看到有童鞋问,游戏测试人员学了Python,可以干点什么. 很多童鞋初学Python,学习了语法和基础类库后,开始迷茫如何实际使用到工作中去,其实Pyt ...

  2. 把python语言翻译出来_Python语言实现翻译小工具(Python打包成exe文件)

    本文主要向大家介绍了Python语言实现翻译小工具(Python打包成exe文件),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.环境 windows10 python3.5 ...

  3. python制作查询软件_python 制作本地应用搜索工具

    一.准备工作 请确保已经安装tkinter.pyperclip.threading 二.预览 1.启动 这是程序启动的主界面. 2.运行 搜索之后的界面. 3.结果 选择应用,右击鼠标复制它的下载链接 ...

  4. python获取图片像素点颜色_Python获取图片位置像素色值及判断色值是否存在

    本文背景: 公司项目的广告系统有个功能,给图片模板打指定的颜色值点,根据需要拼合的图片数量,打点数量也不同.设计说他弄好了,运营上传打点后的模板图片时,获取不到打点的位置坐标.于是找研发看是怎么回事, ...

  5. 利用python来自己写一个服务器台账统计小工具

    利用python来自己写一个服务器台账统计小工具 前言 无奈呀,压力创造成品 背景是这样的,相信在看的各位在管理服务器密码的时候,肯定会有个台账啥的,当然咱也有,但是吧,为了安全期间,不允许出现在服务 ...

  6. python编写数据库连接工具_详解使用Python写一个向数据库填充数据的小工具(推荐)...

    一. 背景 公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据. 而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库 ...

  7. 我用python做了个测词汇量的小工具

    大家好,作为爱学习的自己,我特意用python做了个测词汇量的小工具,让自己每天都能够快乐的学习! 1.页面分析 这次我们采用的是扇贝网来进行词汇量测试,如图: 我们还是老规矩,首先按F12打开开发者 ...

  8. 桌面便利贴软件下载 电脑桌面便签小工具软件下载

    桌面便利贴和桌面便签软件,都是电脑上常用的记事工具.如果这两个工具都没有,我们有一些碎片信息需要记录的时候,就非常的麻烦.如果想要下载桌面便利贴软件或者电脑桌面便签小工具软件,该怎么办呢? 就拿Win ...

  9. python图片压缩软件_Python照片压缩

    Python照片压缩软件是一款功能强大且实用的图片压缩工具,能够帮助用户自动调整各种图像的尺寸,还能压够缩图片大小,帮助我们更好地处理各种图像问题,Python照片压缩用Python语言写成,所以问题 ...

最新文章

  1. 逻辑结构图向关系转换规则
  2. 安装kashigari报错提示Consider using the `--user` option or check the permissions.
  3. git 提交 merge请求 WIP
  4. 碎碎念 | 投资理财那些事
  5. [NOTE] SQL与sqlmap
  6. 分析udp数据报_Linux内核网络udp数据包发送(二)——UDP协议层分析
  7. deepin恢复出厂_win10强制恢复出厂设置方法
  8. openerp mysql_Odoo字段(Fields)总结-至2020全
  9. php base64 gzip加密,PHP base64+gzinflate压缩加密和解密算法
  10. python 替换array中的值_Python实现计数排序
  11. string和数值之间的转换
  12. Breakpad Native异常捕获
  13. UE4 UE5学习和资源网站整理
  14. ubuntu服务器系统进入安全模式,ubuntu bios 无法进入安全模式
  15. 肇庆学院计算机论文选题,肇庆学院本科毕业论文(设计)写作与印制规范
  16. kail详细安装教程
  17. 第六章总结-莫凡商城的注册、登录功能
  18. 红楼梦人物出场顺序统计
  19. 【SPH模型入门】很适合于新手的一篇文章
  20. 丢掉鼠标吧,使用最好用的Eclipse快捷键

热门文章

  1. smtp gmail_如何使用Gmail SMTP服务器在WordPress中发送电子邮件
  2. 常用的原生DOM操作汇总
  3. Blinder: Partition-Oblivious Hierarchical Scheduling论文笔记
  4. 百度地图聚合中的marker添加label后移动、放大缩小时label消失的问题download
  5. 【无标题】【2023最新版】超详细Sqlmap安装保姆级教程,SQL注入使用指南,收藏这一篇就够了
  6. Java IO流--数据读写(字符/字节流/二进制文件)
  7. CST入门——边界条件Boundary的选择与设置
  8. 【厚积薄发系列】C++项目总结13—智能指针和裸指针混用导致的崩溃问题
  9. 快速制作PPT的方法有哪些?这五种很实用!
  10. 欣灵电气递交注册:年营收5.2亿 胡志兴家族色彩浓厚