之前一直是用Typora插入图片的时候,都是先上传图片到服务器,然后再添加链接,今天终于忍不住,还是利用了Typora的图片自动上传功能做了一个脚本。
直接附上代码
Python 客户端
python
import base64
import sys
import requests
import json
import os
token = "这里填写你的小token防止他人恶意提交"
def upload(data):
url = "你的ApiUrl"
res = requests.post(url=url, data=data)
return res.text
def img2base64(imgPath):
with open(imgPath, "rb") as fb:
img = fb.read()
base64_bytes = base64.b64encode(img)
base64_str = base64_bytes.decode("utf-8")
return base64_str
if __name__ == "__main__":
length = len(sys.argv)
sources = []
results = []
for i in range(1,length):
ext = os.path.splitext(sys.argv[i])[-1]
ext = (ext.split(".")[-1], "jpeg")[ext == ".jpg"]
sources.append("data:image/" + ext + ";base64," + img2base64(sys.argv[i]))
content = {"token": token, "data": json.dumps(sources)}
print(upload(content))
然后在Typora的偏好设置里面,设置你的命令
PHP 服务端
PHP
<?php
$token = $_POST['token'];
if ($token != '这里是你设置的小token') exit();
$picpath = json_decode($_POST['data']);
$len = count($picpath);
for ($i = 0; $i < $len; $i++) {
$base64_image = str_replace(' ', '+', $picpath[$i]);
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image, $result)) {
//定义图片储存文件目录
$dir = dirname(__FILE__) . "/images";
//定义文件名称
$picname = date("his") . '_' . getName(11);
//获取图片后缀
if ($result[2] == 'jpeg') {
$picdir = $picname . '.jpg';
} else {
$picdir = $picname . '.' . $result[2];
}
//图片名称
$image_url = $dir . '/' . $picdir;
//储存图片
$img_url = ''; //图片路径
if (file_put_contents($image_url, base64_decode(str_replace($result[1], '', $base64_image)))) {
$img_url = $image_url;
}
}
echo "这里设置和Python一模一样的Url末尾是/" . "images/" . $picdir;
if ($i != $len - 1) echo PHP_EOL;
}
function getName($n)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $n; $i++) {
$index = rand(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
return $randomString;
}