Skip to main content
图片持久化会把 Markdown 中依赖网络访问的图片保存为本地文件,并将图片链接改为相对路径。它适合长期归档 SoMark 解析结果、将 Markdown 导入 RAG 或知识库、迁移文档到其他服务器或办公平台,以及在断网、内网或离线环境中查看文档。这样可以降低文档展示对远程图片 URL、网络环境和访问权限的依赖。

方法一:解析时直接输出 ZIP

这是步骤最少的方法,适合尚未解析文档或可以重新解析的场景。output_formats 是数组,可以只包含 zip(zip中包含图片和markdown),也可以同时请求jsonzip。接口完成解析后,会在 data.result.outputs.zip 中返回 ZIP 下载地址。
1

准备请求

准备待解析文件和 SoMark API 密钥。不要把真实 API 密钥写入代码仓库。
2

设置 ZIP 和图片文件输出

output_formats 设置为包含 zip。当 output_formats 包含 zip 时,element_formats.image 只能设置为 file。以下示例同时请求 zipjson 输出:
Python
3

提交并等待解析完成

调用同步解析接口,并检查响应中的 code0 表示请求成功。
4

下载并检查 ZIP

从API 返回结果读取下载地址,下载并解压压缩包,然后确认其中包含 Markdown 和图片文件。响应中的zip地址:响应中的 ZIP 地址解压后的markdown和图片文件:解压后的 Markdown 和图片文件
查看 output_formats 参数说明

方法二:使用图片持久化 Skill

如果你已经获得 .md.markdown 文件,而其中的 Markdown 图片或 HTML <img> 仍引用 HTTP(S) 地址,可以使用 somark-localize-images Skill。当前实现版本为 1.4.0,需要 Python 3.8 或更高版本,以及 Pillow>=9.4.0,<11.0.0
1

安装依赖

在已获得的 Skill 目录中安装依赖:
2

用自然语言触发 Skill

在支持 Skill 的 Agent 中输入:
3

处理单个文件

也可以直接运行 Skill 自带脚本:
省略 -o 时,脚本会在输入文件旁创建使用原文件名的目录。例如,result.md 默认输出到 result/
4

批量处理目录

传入目录后,脚本会递归处理其中所有 .md.markdown 文件,并为每份文档创建独立的交付包:
批量模式会继续处理其他文档,并在单个文档失败时返回非零退出码和失败文件列表。不要把批量输出目录放在输入目录内部。
处理前:
处理前远程图片链接示例 处理后:
处理后远程图片链接示例 单文件输出结构如下:
验证处理结果时,请确认命令退出码为 0main.md 中的目标图片已改为 ./images/image_NNN.jpg,并且每个引用的图片文件都存在且不为空。最后在本地 Markdown 查看器中打开 main.md,确认图片可以正常显示。 离线查看持久化 Markdown 示例
Skill 会按图片内容识别格式,将图片实际解码后统一重新编码为 JPEG;透明区域使用白色背景。同一 URL 只下载一次。只有全部图片成功后才会写出新的 main.md,原始 Markdown 不会被修改。

下载和文件保护选项

  • 默认每次 HTTP 请求超时为 60 秒,失败后重试 3 次。网络较慢时可使用 --workers 2 --timeout 120 --retries 5
  • 默认限制单张图片最大为 100 MB;如需调整,使用 --max-image-mb
  • 使用可重复传入的 --allowed-host <domain> 限制允许下载的域名。重定向后的域名也会接受检查。
  • 默认拒绝覆盖内容不同的现有 Markdown 或图片。只有确认需要替换时才使用 --force
  • Skill 默认输出目录包,不会主动生成 ZIP。需要压缩时,请在确认结果后单独执行压缩操作。

方法三:直接复用 Python 代码

下面是面向单个 Markdown 文件常见场景的精简示例。它支持 Markdown 图片和 HTML <img> 中的 HTTP(S) 图片,下载完成后统一转换为 JPEG,输出 main.mdimages/image_NNN.jpg,且不修改原始 Markdown。 与完整 Skill 相比,这个示例不支持目录批处理、域名白名单、并发下载、最大图片体积限制、代码围栏保护和 --force 覆盖已有输出。它会拒绝使用已经存在的输出目录,避免静默覆盖文件。 先安装依赖:
将以下代码保存为 localize_somark_images.py
运行脚本:

如何选择

  • 尚未解析文档:优先使用解析时输出 ZIP。
  • 已有 Markdown 且使用 Agent 工具:使用图片持久化 Skill。
  • 需要自行集成或修改逻辑:复用 Python 代码。