跳转至

插图裁剪

本页最后更新于 ,内容可能过时

坐标由模型目测页面图后给定, 脚本只按矩形裁
不做版式识别, 不接 OCR, 不自动找图

环境准备

python -m pip install pillow

直接在页面图上裁

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, 偏大一些更稳妥
  • 坐标就是看图时量到的像素, 这条路径不做任何换算

裁得不合适就重新量坐标再裁一次, 不保留废弃的图

裁完自检

裁完读回这张图, 逐项确认

  1. 教材印的图注没有被裁进来, 图注由笔记另写在上方
  2. 图形边缘完整, 圆, 坐标轴, 面板图的第一行都没有被切
  3. 邻栏正文没有被框进来, 图在右侧而正文在左时最容易带进来
  4. 图上方的公式行或正文行没有被带入

四项都过再交给下一步

换算回源页高清重裁

页面图 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 处理, 不要在裁图时插值放大