插图裁剪¶
本页最后更新于 ,内容可能过时
坐标由模型目测页面图后给定, 脚本只按矩形裁
不做版式识别, 不接 OCR, 不自动找图
环境准备¶
直接在页面图上裁¶
python .claude/skills/pdf-figure-crop/scripts/crop.py crop "$tmp\p0037-0039-d160.png" \
--box 90,1580,900,2250 --pad 12 --out "$tmp\fig-1-1.png"
--box是页面图像素坐标, 顺序固定x1,y1,x2,y2--pad四周外扩像素, 默认 12, 偏大一些更稳妥- 坐标就是看图时量到的像素, 这条路径不做任何换算
裁得不合适就重新量坐标再裁一次, 不保留废弃的图
裁完自检¶
裁完读回这张图, 逐项确认
- 教材印的图注没有被裁进来, 图注由笔记另写在上方
- 图形边缘完整, 圆, 坐标轴, 面板图的第一行都没有被切
- 邻栏正文没有被框进来, 图在右侧而正文在左时最容易带进来
- 图上方的公式行或正文行没有被带入
四项都过再交给下一步
换算回源页高清重裁¶
页面图 dpi 偏低, 图里的字看不清时走这条
页面图是单页渲染的还是多页拼的, 这条路径都适用, 差别只在坐标清单
python .claude/skills/pdf-figure-crop/scripts/crop.py crop "$tmp\p0037-0039-d160.png" \
--box 90,1580,900,2250 --manifest "$tmp\p0037-0039-d160.json" \
--from-page --dpi 300 --out "$tmp\fig-1-1-hi.png"
--manifest是pdf-page-image产出的坐标清单, 必填--dpi是重新渲染源页的 dpi, 默认 300- 脚本按清单把页面图坐标换回源页坐标, 重渲那一页再裁
- 换算只在脚本里做一处, 页面图 y 与页内 y 的关系是 y 减去该页块的起始行和页号标签条高度
产物¶
单张 png, 放仓库外的临时目录, 命名 fig-<章号>-<图序>.png
图2-1 存成 fig-2-1.png, 图序是 图2-1 里的那个 1, 不带章号前缀
文件名只作本地暂存, 上传时按 coscmd 的时间戳规则改名
注意事项¶
x2不大于x1或y2不大于y1时脚本直接报错, 这是坐标写反的典型情形- box 跨页或越界时脚本报错并列出各页的 y 范围
--pad触到图片边界就裁到边界, 不报错--pad按清单的 dpi 计, 不按输出的 dpi 计--from-page --dpi 300配 160 dpi 的清单时,--pad 12在输出图上外扩约 22 像素- 换算后留白的视觉宽度与直接在页面图上裁一致
- 输出固定 png, 不放大不压缩
- 插图本身分辨率低时, 先裁出来再交给
super-resolution处理, 不要在裁图时插值放大