当前位置: 首页 > ai >正文

图形编辑器基于Paper.js教程27:对图像描摹的功能实现,以及参数调整

本篇文章来讲一下 图像描摹的功能的实现。

我们知道要雕刻图片可以通过分析图片的像素来生成相应的gcode进行雕刻,但如果你想要将图片转换为线稿进行雕刻,这个时候就要从图片中提取出 线稿。
例如下面的图片:
在这里插入图片描述

你想要获取到这个图片的线稿,如下图,是一个矢量的svg
在这里插入图片描述

目前有一些js的方法可以从图片中获取线稿,

首推的是这个库 https://github.com/kilobtye/potrace

potrace.js 是一个用于将栅格图像(如 JPG、PNG)转换为矢量图(SVG)的 JavaScript 库,基于著名的 Potrace 算法。它能提取图像中的线稿轮廓,非常适用于图像转矢量、线稿提取、激光雕刻路径生成等应用场景。


📦 使用说明(API 文档)

✅ 基本流程

potrace.loadImageFromFile(file);         // 加载图像(File 对象)
potrace.setParameter({...});             // 设置参数(可选)
potrace.process(() => {const svg = potrace.getSVG(1.0);       // 获取 SVG 字符串console.log(svg);
});

🖼️ 1. 加载图像

loadImageFromFile(file)

<input type="file"> 获取的 File 对象中加载图像。

const file = inputElement.files[0];
potrace.loadImageFromFile(file);

loadImageFromUrl(url)

从 URL 加载图像。受浏览器同源策略限制,只能加载同源图片

potrace.loadImageFromUrl("images/sample.png");

注意:potrace.js 不会自动进行前处理,例如灰度处理或二值化。它直接将图像转换为黑白。


⚙️ 2. 设置参数

setParameter({ ... })

用于微调线稿提取效果。支持以下参数:

参数名类型默认值说明
turnpolicystring"minority"路径歧义处理方式,可选:"black" "white" "left" "right" "minority" "majority"
turdsizenumber2去除小块区域的大小阈值,单位为像素数量
optcurvebooleantrue是否开启曲线优化
alphamaxnumber1拐角角度阈值,越小越锐利
opttolerancenumber0.2曲线优化的容差
示例:
potrace.setParameter({turnpolicy: "black",turdsize: 5,optcurve: true,alphamax: 0.8,opttolerance: 0.3
});

▶️ 3. 处理图像

process(callback)

当图像加载完毕后,自动运行 Potrace 算法,并执行回调函数。

potrace.process(() => {console.log("处理完成,SVG 获取中...");
});

🖍️ 4. 获取 SVG 矢量结果

getSVG(scale, opt_type)

生成 SVG 字符串。

参数类型默认值说明
scalenumber1.0输出 SVG 的缩放倍数
opt_typestring可选可设为 "curve",表示使用曲线表示输出(默认为路径指令)
const svg = potrace.getSVG(1.5, "curve");

你可以将这个字符串插入到页面中展示 SVG:

document.getElementById("preview").innerHTML = svg;

📋 完整示例

<input type="file" id="upload" />
<div id="preview"></div>
<script src="potrace.js"></script>
<script>document.getElementById("upload").addEventListener("change", (e) => {const file = e.target.files[0];potrace.loadImageFromFile(file);potrace.setParameter({turnpolicy: "minority",turdsize: 3,optcurve: true,alphamax: 1,opttolerance: 0.2});potrace.process(() => {const svg = potrace.getSVG(1.0, "curve");document.getElementById("preview").innerHTML = svg;});});
</script>

此外还有 nodejs版本
https://github.com/iwsfg/node-potrace

图片直接转svg
https://github.com/tomayac/SVGcode

题外话,今天教师资格的考试成绩出来啦, 过线,准备5月份的面试。
在这里插入图片描述

http://www.xdnf.cn/news/829.html

相关文章:

  • 一款支持多线程的批量任务均衡器
  • Craft 是什么:腾讯 Cloud Studio 中的 CodeBuddy 提供了 Craft 功能
  • 阻塞队列-ArrayBlockingQueue
  • 【Linux专栏】zip 多个文件不带路径
  • 入选AAAI 2025,浙江大学提出多对一回归模型M2OST,利用数字病理图像精准预测基因表达
  • C语言高频面试题——指针数组和数组指针
  • Spark-SQL核心编程
  • day33和day34图像处理OpenCV
  • MySQL数据库 - InnoDB引擎
  • DeepSeek智能时空数据分析(二):3秒对话式搞定“等时圈”绘制
  • OneClicker脚本自动运行工具
  • 2025年蓝桥杯第十六届CC++大学B组真题及代码
  • 模拟堆详解
  • 软件工程中的维护类型
  • OpenSSL1.1.1d windows安装包资源使用
  • [预备知识]1. 线性代数基础
  • 浙江大学 DeepSeek 公开课 第三季 第1期讲座 - 唐谈 研究员 (附PPT下载) | 突破信息差
  • 腾讯云×数语科技:Datablau DDM (AI智能版)上架云应用!
  • 虚拟环境下编译ros2节点需注意的地方
  • 【上位机——MFC】运行时类信息机制
  • # 05_Elastic Stack 从入门到实践(五)
  • Kafka 在小流量和大流量场景下的顺序消费问题
  • Spring MVC DispatcherServlet 的作用是什么? 它在整个请求处理流程中扮演了什么角色?为什么它是核心?
  • 平板电脑做欧盟网络安全法案(EU)2022/30
  • 人工智能100问☞第9问:什么是AI芯片?
  • 形象理解华为云物联网iotDA开发流程
  • MYSQL之慢查询分析(Analysis of Slow MySQL Query)
  • PyCharm 初级教程:从安装到第一个 Python 项目
  • 基于ueditor编辑器的功能开发之重写ueditor的查找和替换功能,支持滚动定位
  • 链式栈和线性栈