2026-02-06 16:18:57 +08:00
2026-02-06 11:56:47 +08:00
2026-02-06 11:56:47 +08:00
2026-02-06 16:15:53 +08:00
2026-02-06 11:56:47 +08:00
2026-02-06 11:56:47 +08:00
2026-02-06 11:56:47 +08:00
2026-02-06 11:58:42 +08:00
2026-02-06 11:56:47 +08:00
2026-02-06 16:18:57 +08:00
2026-02-06 11:56:47 +08:00
2026-02-06 11:56:47 +08:00
2026-02-06 11:56:47 +08:00
2026-02-06 11:56:47 +08:00

图片转SVG工具

将图片中的黑色部分提取并转换为高保真 SVG基于 potrace 描边以保证准确还原。

功能特点

  • 自动提取黑色区域Otsu 自动阈值)
  • 透明通道白底合成,避免边缘污染
  • potrace 高精度矢量化,支持孔洞
  • 默认保真优先(关闭曲线优化)
  • 支持圆拟合简化(近似圆轮廓可替代为圆弧)

安装依赖

pip install -r requirements.txt

安装 potrace必需

brew install potrace

字体转SVG依赖

用于 font2svg.py(字形轮廓输出):

pip install fonttools uharfbuzz

使用方法

基本用法

python pic2svg.py input.png

这将在同一目录生成 input.svg 文件。

指定输出目录

python pic2svg.py input.png --outdir svg

常用参数示例

# 使用固定阈值
python pic2svg.py input.png --threshold 128

# 保真优先(默认参数)
python pic2svg.py input.png --turdsize 0 --opttolerance 0 --unit 1

# 文件更小(可能略失真)
python pic2svg.py input.png --optimize-curves --opttolerance 0.2

# 圆拟合简化(仅当轮廓接近圆时生效)
python pic2svg.py input.png --circle-fit 0.02

# 批量转换(输入目录)
python pic2svg.py --indir images --outdir svg

字体转SVG新脚本

python font2svg.py --font path/to/font.ttf --text "Hello"
python font2svg.py --font font/XCDUANZHUANGSONGTI.ttf --text "星程紫微" --outdir svg
python font2svg.py --font path/to/font.ttf --text "Hello" --letter-spacing 20
python font2svg.py --fontdir font --text "星程紫微" --outdir svg

说明:单字体输出文件名根据 --text 自动生成;使用 --fontdir 时会加上字体名作为前缀。

参数说明

参数 说明 默认值
input 输入图片路径(必需) -
--indir 输入目录(批量转换) -
--outdir 输出目录(自动创建,使用输入文件名.svg -
--threshold 固定阈值0-255未设置则使用Otsu -
--turdsize 抑制噪点面积阈值potrace -t 0
--opttolerance 曲线优化容差potrace -O 0.0
--unit 坐标量化单位potrace -u 1
--optimize-curves 启用曲线优化(更小但可能略失真) 关闭
--circle-fit 圆拟合误差阈值(相对半径),>0启用圆替代 0.0

font2svg 参数说明

参数 说明 默认值
--font 字体文件路径ttf/otf -
--text 文字内容 -
--outdir 输出目录(自动创建) -
--letter-spacing 字距(字体单位) 0
--fontdir 字体目录遍历ttf/otf -

批量转换

python pic2svg.py --indir images --outdir output

工作原理

  1. 读取图像,透明通道白底合成
  2. 灰度化 + Otsu 反色二值化
  3. 若启用 --circle-fit,先尝试圆拟合替代
  4. 写入 PBM 位图
  5. potrace 描边生成 SVG圆拟合失败时回退

故障排除

细节缺失或断裂:降低 turdsize,关闭 --optimize-curves,必要时设置更合适的 --threshold

文件过大:开启 --optimize-curves 或适当增大 --opttolerance

边缘毛刺:尝试调整 --threshold,或先对原图做轻微去噪。

圆拟合过于粗糙:减小 --circle-fit 或关闭圆拟合。

技术栈

  • Python 3.6+
  • OpenCV / NumPy
  • potrace
  • fonttools / uharfbuzz

License

MIT

Description
No description provided
Readme 73 MiB
v1.0.3 Latest
2026-02-11 11:07:36 +08:00
Languages
JavaScript 49%
Vue 18%
Python 17.1%
TypeScript 11.2%
Shell 4%
Other 0.7%