typora+picgo实现本地自动转储图片base64
本文参考自:typora+picgo实现本地自动转储图片base64值
前言
在3月份的时候,Gitee和谐了个人图床仓库,导致很多人受到影响,我也是其中之一。然后不得不转战到github,并使用jsdelivr进行加速。但最近发现这种方式还是不好用,原因就是不稳定,有时上传不成功;另外,即使上传成功;当把文章写好后,粘贴到CSDN时,图片会出现” [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传]“ 这种问题!很头疼!!!因此想寻求一种更稳定简单的方式来保存图片。
最稳的方式莫过于图片本地保存了,但本地保存图片文件需要本地目录,管理麻烦,也不方便文档在移动端查看等。这时我发现markdown是可以展示base64的图片的,而我们写文章的一般截图文件也比较小。正好符合要求。经过一番查找,看到了上面大神的文章;然后按文章进行实践,并根据情况做了一些改动,在此记录。
软件插件版本
typora:version 0.11.18(beta)
picgo:2.3.0
web-uploader插件版本:1.1.1
web-uploader是picgo-core的上传插件,请自行安装好,网上都有教程。
魔改picgo的插件web-uploader
我的web-uploader
插件安装目录为(与原文不一样):%APPDATA%\picgo\node_modules\picgo-plugin-web-uploader\src
打开此目录,可以看到目录下有一个index.js
文件,插件的主要功能代码就在这个文件中。我们需要对其进行修改,直接把原内容全部删除,然后粘贴为如下内容:
// const logger = require('@varnxy/logger')
// logger.setDirectory('/Users/zhang/Work/WorkSpaces/WebWorkSpace/picgo-plugin-web-uploader/logs')
// let log = logger('plugin')
module.exports = (ctx) => {
const register = () => {
ctx.helper.uploader.register('web-uploader', {
handle,
name: '自定义Web图床',
})
}
const handle = async function (ctx) {
try {
let imgList = ctx.output
for (let i in imgList) {
let image = imgList[i].base64Image
if (!image && imgList[i].buffer) {
image = imgList[i].buffer.toString('base64')
}
let body = await ((ext,base64)=>{
return "data:image/"+ext.substr(1)+";base64,"+base64
})(imgList[i].extname,image)
delete imgList[i].base64Image
delete imgList[i].buffer
if(body){
imgList[i]['imgUrl'] = body
}else{
ctx.emit('notification', {
title: '数据异常',//JSON解析失败
body: '请检查'
})
}
}
} catch (err) {
ctx.emit('notification', {
title: '上传失败',
body: JSON.stringify(err)
})
}
}
return {
uploader: 'web-uploader',
// transformer: 'web-uploader',
// config: config,
register
}
}
**备注:**原文还有 修改配置文件 和 修改Typora的处理代码([Typora中位于resources/appsrc/window/frame.js
]的if (/^(https?|ftp|file):\//.exec(r))
改为if (/^(https?|ftp|file|data):\//.exec(r))
)这两步; 但经我尝试,发现根本不需要修改也可以!也许是软件版本不同的原因
修改后保存,把默认图床改为"自定义Web图床";
为了markdown文章图片可以直接粘贴到CSDN; 还需要做一些设置:
打开 PicGo设置->自定义链接格式,自定义设置为:<img src="$url" />
,如图: