Markdown 写起来方便、排版好看,深受开发者喜爱。但有一个硬伤:它不支持内嵌图片。所有图片都是通过外部链接引用的,这意味着分享 Markdown 文件时,你必须把图片一起发过去,还要确保对方的文件路径和你完全一致。

图片一多,光维护路径就很麻烦。不过这个问题有解。利用 Base64 编码,可以将图片直接转成文本嵌入 Markdown 文件中,一个文件包含全部内容,分享时不再需要额外携带图片文件。

在截屏快捷键截屏后直接复制base64编码到Markdown编辑器。

import win32ui
import os
import base64
from io import BytesIO
from PIL import Image, ImageGrab


def get_image():
"""优先从剪贴板取图,没有则弹出文件选择框"""
im = ImageGrab.grabclipboard()
if isinstance(im, Image.Image):
return im

dlg = win32ui.CreateFileDialog(1)
dlg.SetOFNInitialDir(os.path.expanduser("~\\Pictures"))
dlg.SetOFNFilter("图片文件 (*.png;*.jpg;*.jpeg;*.bmp)|*.png;*.jpg;*.jpeg;*.bmp")

if dlg.DoModal() != 1:
print("未选择文件")
return None

return Image.open(dlg.GetPathName())


def image_to_markdown(image, max_width=778, max_height=439, quality=70):
"""将 PIL Image 转为 Markdown 图片链接(Base64 内嵌)"""
image.thumbnail((max_width, max_height), Image.LANCZOS)
image = image.convert("RGB")

buffer = BytesIO()
image.save(buffer, format="JPEG", quality=quality)
base64_str = base64.b64encode(buffer.getvalue()).decode()

return f"![image](data:image/jpeg;base64,{base64_str})"


img = get_image()
if img:
markdown_link = image_to_markdown(img)
print(markdown_link)

然后用VBS脚本将图片复制到剪切板

Set ws = createObject("WScript.shell")
ws.run "cmd /c python -u D:\pathto\base64pic.py | clip", vbhide

这样我们可以先用工具截图,然后当我们剪切板有图片存在的时候,运行这个vbs,就可以将图片转换成base64数据然后直接放到剪切板里面了。

如果脚本路径有中文,保存VBS代码的时候需要使用GBK保存,不然会出问题!!!。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注