Loading

Typora自定义Gitee图床上传脚本

新建Gitee仓库

  • 仓库必须是开源(所有人可见)
  • 选择初始化
image-20210612100355952

获取Gitee OpenAPI的access_token

在设置-安全设置-私人令牌-生成新令牌,令牌需要有projects权限,生成后保存好给到的access_token。

image-20210612100820954

Python3环境与脚本配置变量的修改

在图片大小超过1M的时候,gitee图床会需要求登录gitee才能访问,所以在上传前先进行压缩。

import requests
import sys
import time
import random
import os
import base64
import json
import cv2

# git commit的信息
message="图床"
# 刚刚获取到的私人令牌
access_token="XXXXXX"
# gitee的用户名
owner="XXXXXX" 
# 刚刚新建的仓库名
repo="pic-repo"
# 提交文件目标目录
dir="img"

def compress_img(img):
    src=cv2.imread(img, 1)
    d,fname=os.path.split(img)
    purename=os.path.splitext(fname)[0]
    cv2.imwrite(d+"/"+purename+".jpg", src, [cv2.IMWRITE_JPEG_QUALITY, 80])
    return d+"/"+purename+".jpg"

def get_size(file):
    # 获取文件大小:KB
    size = os.path.getsize(file)
    return size / 1024

base_url="https://gitee.com/api/v5/repos/"
filename=sys.argv[1]
filepath=sys.argv[2]
imgs=sys.argv[3:]
tmp="""{"access_token":"%s","content":"%s","message":"%s"}"""

arr=[]
hasF=False
for img in imgs:
    file_ext = os.path.splitext(img)[-1]
    newName="%s/%s_%s_%s" % (filename, filename,time.strftime("%Y%m%d%H%M%S", time.localtime()),random.randint(100000, 999999))
    url=base_url+owner+"/"+repo+"/contents/"+dir+"/"+newName+file_ext
    
    if (get_size(img)>1000):
    	img = compress_img(img)

    with open(img, 'rb') as f:
        encode_img = base64.b64encode(f.read())
        img_base64 = encode_img.decode()
        #print('data:image/{};base64,{}'.format(file_ext[1:], img_base64))
        headers={"Content-Type":"application/json;charset=UTF-8"}
        data=tmp%(access_token, img_base64, message)
        f.close()
        try:
            res=requests.post(url=url, headers=headers, data=data.encode('utf-8'))
            res.encoding = "utf-8"
            resBody=json.loads(res.text)
            arr.append(resBody['content']['download_url'])
        except Exception as e:
            print(e)
            hasF=True

if (hasF):
    print("Upload Failed:")
else:
    print("Upload Success:")
    for a in arr:
        print(a)

Typora配置

  • 取消勾选本地位置的图片规则
    • 这样就不会自动上传图片,等到文章编辑好之后,再手动右键图片进行上传。
    • 截图粘贴的图片默认会放到typora自己的一个资源文件夹,需要定时清理(Mac下为/Users/XXXX/Library/Application Support/typora-user-images)
  • 勾选网络位置的图片规则
    • 会自动将网络位置的图片上传到图床
  • 上传服务填写Custom Command
  • 命令填写python脚本,并附带``${filename}${filepath}`参数
    • /usr/local/bin/python3 /Users/Tung/hexoblog/pyupload.py ${filename} ${filepath}
    • 环境中可能有多种python环境,手动指定install了依赖包的那个环境即可
image-20210612102101852

参考文档

Upload Images (typora.io)

Gitee API 文档

posted @ 2021-06-12 10:40  Tung7  阅读(195)  评论(0)    收藏  举报