前言
在jupyter贴图片时使用html格式方便调整图片参数,如调整大小和位置等,而使用html需要指定图片地址,这就需要截图后将图片保存到指定目录下,然后复制地址,我觉得比较麻烦,而且不方便导出到其他在线笔记(图片没法显示).
于是我想到了使用图床这种解决方案,由于没有查询到jupyter对图床的支持,我就自己写了个脚本.
主要实现的功能是用户按下截图快捷键(我使用的截图软件是snipaste,快捷键是F1)进行截图,截完图片以后等几秒,脚本会将图片自动上传到码云,并且会将图片链接写入剪切板,这样直接在jupyter按下粘贴快捷键,运行一下,图片就会显示
环境准备
python版本:3.8.5
git clone https://github.com/boppreh/keyboard
然后把里面的keyboard包拖到项目目录- 安装 pyperclip包
conda install -c conda-forge pyperclip
- 安装gitpython包
conda install gitpython
或者pip install gitpython
如果访问不了github可以使用github镜像:https://hub.fastgit.org/
注意:要创建一个开源的仓库用来存图片
代码
import os
import time
from shutil import copyfile
from git import Repo
import pyperclip
import keyboard
from win10toast import ToastNotifier
from pynput.mouse import Listener
# 复制文件
def copy_pic_2_local_git():
filedir = 'D:/TOP/some/截图/' # 截图源文件地址
# 获取截图文件夹中的文件名
lis = os.listdir(filedir)
# 通过排序获取最新文件名字
lis.sort(key=lambda x: os.path.getmtime((filedir + "\\" + x)))
filename = lis[-1]
# 获取最新文件地址
file_abs = os.path.join(filedir, filename)
# git目标路径
targ_dir = r'D:\TOP\study\programe\py\upload_png_2_gitee_\pic'
lis = os.listdir(targ_dir)
lis.sort(key=lambda x: os.path.getmtime((targ_dir + "\\" + x)))
# 获取git文件夹中最新文件名
filename = lis[-1] if lis[-1] != '.git' else lis[-2]
# 获取最新文件文件名中的数字,并加一,作为新文件的文件名
try:
now_count = int(''.join(list(filter(str.isdigit, filename)))) + 1
except:
now_count = 1
# 新截图的名字
tar_file_name = str(now_count) + '.png'
# 新截图的地址
tar_file_abs = os.path.join(targ_dir, tar_file_name)
# 从截图文件夹把最新截图复制到git文件夹,并重新命名
copyfile(file_abs, tar_file_abs)
print('复制成功!')
return tar_file_name
def git_op(file_name):
print('开始上传!')
# 仓库地址
repo = Repo(r'D:\TOP\study\programe\py\upload_png_2_gitee_\pic\.git')
git = repo.git
git.add(file_name)
print('开始提交!')
git.commit('-m', 'v1')
git.push()
print('上传成功!')
'''写入剪切板'''
def write(file_name):
base_url = "https://gitee.com/改成你的哦/pic/raw/master/"
url = base_url + file_name
html_ = '<img style="float: left;" src="{}">'.format(url)
pyperclip.copy(html_)
pyperclip.paste()
print('剪切板写入成功!')
print('----------------end----------------')
def main(toaster):
print('----------------start----------------')
def on_click(x, y, button, pressed):
global start
if pressed:
print('用户正在截图')
else:
print('用户截图完毕')
start = True
return False
with Listener(on_click=on_click) as listener:
listener.join()
if start:
print('等待截图保存到本地')
time.sleep(2.5)
print('截图已经保存本地')
# 复制截图到git目录
file_name = copy_pic_2_local_git()
# git 上传截图
git_op(file_name)
# 将网址写入剪切板
write(file_name)
toaster.show_toast("截图已经成功上传",
"赶快粘贴吧!",
duration=10)
if __name__ == '__main__':
print('欢迎使用截图脚本\n')
toaster = ToastNotifier()
# 监听键盘,按下f1时启动程序
keyboard.add_hotkey('f1', main,args=([toaster]))
keyboard.wait()
# wait里也可以设置按键,说明当按到该键时结束