【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()
	
posted @ 2021-10-10 11:13  ぃ往事深处少年蓝べ  阅读(727)  评论(2编辑  收藏  举报