如何优雅地在jupyter贴图片(snipaste+jupyter+gitee)

前言

在jupyter贴图片时使用html格式方便调整图片参数,如调整大小和位置等,而使用html需要指定图片地址,这就需要截图后将图片保存到指定目录下,然后复制地址,我觉得比较麻烦,而且不方便导出到其他在线笔记(图片没法显示).
于是我想到了使用图床这种解决方案,由于没有查询到jupyter对图床的支持,我就自己写了个脚本.

主要实现的功能是用户按下截图快捷键(我使用的截图软件是snipaste,快捷键是F1)进行截图,截完图片以后等几秒,脚本会将图片自动上传到码云,并且会将图片链接写入剪切板,这样直接在jupyter按下粘贴快捷键,运行一下,图片就会显示

环境准备

python版本:3.8.5

  1. git clone https://github.com/boppreh/keyboard 然后把里面的keyboard包拖到项目目录
  2. 安装 pyperclip包conda install -c conda-forge pyperclip
  3. 安装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里也可以设置按键,说明当按到该键时结束



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值