【markdown】python自动将md文件中的链接图片转为base64引入
经过了上一篇文章的分析,发现图片是可以通过base64字符串的方式嵌入到.md文件中。然而一个markdown文档中可能会有多张图片,如果每次都靠手动将图片转为base64,再通过之前的方式嵌到文章末尾,任务量实在太大。正好自己还会点python,就写了个脚本,自动将markdown文档里的图片转化为base64并引入。
先放资源
百度网盘 提取码:1gzw
此文件为python脚本文件(pyw),使用方式在文件夹里有。
未来有机会可以整个exe版本的。
目前的几个问题:
- 遇到链接错误(如网络链接失效,本地文件路径有误)时,不改变原链接。(即不引入为base64资源)
- 断网时,网络图片链接不改变。(即不引入为base64资源)
- 使用相对路径的图片无法引入。
脚本代码
代码挺简单的,有兴趣的可以看看。
import sys
import re
import requests
import base64
def main():
if len(sys.argv) < 2:
print('[error]请输入md文件路径')
return
md_path = sys.argv[1]
with open(md_path,'r', encoding='utf-8') as f:
str = f.read()
str += '\n\n\n\n\n\n'
img_path = re.findall('!\[.*?\]\((.*?)\)', str)
key = 0
for path in img_path:
if re.match('http.://.*', path):
try:
data = requests.get(url=path).content
except Exception:
print('[warn]请检查网络连接或图片链接(%s)是否有效'%path)
continue
else:
try:
with open(path,'rb') as f:
data = f.read()
except FileNotFoundError:
print('[warn]请检查本地文件(%s)是否存在'%path)
continue
print('[success]%s'%path)
base64_str = base64.b64encode(data).decode()
str = str.replace('(%s)'%path, '[%d]'%key)
str += '[%d]:data:image/jpg;base64,%s\n\n'%(key, base64_str)
key += 1
with open('result.md', 'w+', encoding='utf-8') as f:
f.write(str)
main()