圖形編輯器基于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.pswp.cn/news/902829.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902829.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902829.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人工智能與機器學習,誰是誰的子集 —— 再談智能的邊界與演進路徑

人工智能&#xff08;Artificial Intelligence, AI&#xff09;作為當代最具影響力的前沿技術之一&#xff0c;常被大眾簡化為 “深度學習” 或 “大模型” 等標簽。然而&#xff0c;這種簡化認知往往掩蓋了AI技術內部結構的復雜性與多樣性。事實上&#xff0c;AI并非單一方法的…

Oracle_開啟歸檔日志和重做日志

在Oracle中&#xff0c;類似于MySQL的binlog的機制是歸檔日志&#xff08;Archive Log&#xff09;和重做日志&#xff08;Redo Log&#xff09; 查詢歸檔日志狀態 SELECT log_mode FROM v$database; – 輸出示例&#xff1a; – LOG_MODE – ARCHIVELOG (表示已開啟) – NO…

IDEA編寫flinkSQL(快速體驗版本,--無需配置環境)

相關資料 文檔內容鏈接地址datagen生成器https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/connectors/table/datagen/print 生成器https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/connectors/table/print/ 準備工作 優點就是下載個ide…

基于AI技術的高速公路交通引流系統設計與應用研究

基于AI技術的高速公路交通引流系統設計與應用研究 1. 研究背景與意義 1.1 交通系統演化脈絡 1.1.1 發展階段劃分 機械化時代&#xff08;1950-1990&#xff09;&#xff1a;固定式信號控制信息化時代&#xff08;1991-2010&#xff09;&#xff1a;SCATS/SCOOT系統智能化時代…

NEGATIVE LABEL GUIDED OOD DETECTION WITH PRETRAINED VISION-LANGUAGE MODELS

1. 介紹: 這篇論文也是基于CLIP通過后處理的方法實現的OOD的檢測,但是設計點在于,之前的方法是使用的ID的類別,這篇工作是通過添加一些在語義上非常不同于ID的類別的外分布類來做的OOD檢測。 CLIP做OOD檢測的這個系列里面我看的以及記錄的第一篇就是MCM的方法,這也是確實是…

Linux 網絡基礎三 (數據鏈路層協議:以太網協議、ARP 協議)

一、以太網 兩個不同局域網的主機傳遞數據并不是直接傳遞的&#xff0c;而是通過路由器 “一跳一跳” 的傳遞過去。 跨網絡傳輸的本質&#xff1a;由無數個局域網&#xff08;子網&#xff09;轉發的結果。 所以&#xff0c;要理解數據跨網絡轉發原理就要先理解一個局域網中數…

Azure Data Factory ETL設計與調度最佳實踐

一、引言 在Azure Data Factory (ADF) 中&#xff0c;調度和設計ETL&#xff08;抽取、轉換、加載&#xff09;過程需要綜合考量多方面因素&#xff0c;以確保數據處理高效、可擴展、可靠且易于維護。以下將詳細介紹相關關鍵考慮因素、最佳實踐&#xff0c;并輔以具體示例說明…

非序列實現MEMS聚焦功能

zemax非序列模式下有MEMS,但是沒有對應的代碼。無法修改成自己需要的功能 以下是實現MEMS聚焦功能: #include <windows.h> #include <cmath> #include <stdio.h> #include <string.h> #include <algorithm> #undef max #undef min#define D…

android studio sdk unavailable和Android 安裝時報錯:SDK emulator directory is missing

md 網上說的都是更換proxy代理什么的&#xff0c;換網的&#xff0c;還有一些二其他亂七八糟的&#xff0c;根本沒用&#xff0c;感覺很多就是解決不了問題&#xff0c;還賊多賊一致&#xff0c;同質化&#xff0c;感覺很坑人&#xff0c;讓人覺得他們和我的一樣的&#xff0c;…

三維重建模塊VR,3DCursor,MPR與VR的坐標轉換

MPR里的reslicecursor 的坐標與 vtkimage 坐標一致。 但三維窗格里的vtkvolume 的坐標是相對坐標&#xff0c;坐標值依然是MM單位。 用中心點的偏移量比較容易實現&#xff0c;交互中Reslicercursor中心點 距離 vtkimagedata 的中心點 的偏移量&#xff0c;用于vtkvolume即可…

Python Cookbook-6.9 快速復制對象

任務 為了使用 copy.copy&#xff0c;需要實現特殊方法__copy__。而且你的類的__init__比較耗時所以你希望能夠繞過它并獲得一個“空的”未初始化的類實例。 解決方案 下面的解決方案可同時適用于新風格和經典類: def empty_copy(obj):class Empty(obj.__class__):def __in…

kubernets集群的安裝-node節點安裝-(簡單可用)-超詳細

一、kubernetes 1、簡介 kubernetes&#xff0c;簡稱K8s&#xff08;庫伯內特&#xff09;&#xff0c;是用8代替名字中間的8個字符“ubernete”而成的縮寫 云計算的三種主要服務模式——基礎設施即服務&#xff08;IaaS&#xff09;、平臺即服務&#xff08;PaaS&#xff0…

【Linux學習筆記】進程的fork創建 exit終止 wait等待

【Linux學習筆記】進程的fork創建 exit終止 wait等待 &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;Linux學習筆記 文章目錄 【Linux學習筆記】進程的fork創建 exit終止 wait等待前言1.進程創建1.1 fork函數初識1.2fork函數返回值1.3寫時拷…

鴻蒙應用開發證書考試的一點想法

一、介紹&#xff1a; 直接上圖 二、體驗后的想法&#xff1a; 1.知識點在指南API參考最佳實踐里面找 2.沒有明確說明考試不能查第1點的文檔&#xff0c;但是考試只有1個小時&#xff0c;合理分配時間 3.切屏三次后自動提交要注意&#xff0c;每月3次機會下月又有3次機會&a…

含錫廢水處理的經濟效益

主要體現在成本節約和資源回收兩方面&#xff0c;具體收益因處理工藝、廢水濃度及規模差異而不同。以下結合不同技術路線進行量化分析&#xff1a; 一、直接經濟效益 資源回收收益 金屬錫回收&#xff1a; 若廢水中錫濃度為100 mg/L&#xff0c;日處理量100噸&#xff0c;則每…

Base64編碼原理:二進制數據與文本的轉換技術

&#x1f504; Base64編碼原理&#xff1a;二進制數據與文本的轉換技術 開發者的數據編碼困境 作為開發者&#xff0c;你是否曾遇到這些與Base64相關的挑戰&#xff1a; &#x1f4ca; 需要在JSON中傳輸二進制數據&#xff0c;但不確定如何正確編碼&#x1f5bc;? 想要在HT…

day49—雙指針+貪心—驗證回文串(LeetCode-680)

題目描述 給你一個字符串 s&#xff0c;最多 可以從中刪除一個字符。 請你判斷 s 是否能成為回文字符串&#xff1a;如果能&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 示例 1&#xff1a; 輸入&#xff1a;s "aba" 輸出&#xff1a;true…

Kubernetes(k8s) 集群的快速部署

實驗目的 本實驗旨在通過 Kubeadm 工具快速部署一個 Kubernetes 1.28.2 集群&#xff0c;包含 1 個 Master 節點和 2 個 Worker 節點&#xff0c;并驗證集群的基本功能。實驗涉及以下關鍵步驟&#xff1a; 環境準備&#xff1a;配置主機名、關閉防火墻、禁用 SELinux、設置時區…

7年經驗的Java程序員的技術知識概覽(及分階段學習計劃、資源推薦、職業發展建議)

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 **一、技術棧全景與深度要求****1. 核心Java…

28、.NET 中元數據是什么?

在.NET中&#xff0c;元數據&#xff08;Metadata&#xff09;是描述程序結構和類型信息的二進制數據集合&#xff0c;它是.NET運行時&#xff08;CLR&#xff09;的核心基礎組件之一&#xff0c;用于支持程序加載、類型解析、反射、安全校驗等關鍵功能。以下是其核心特性和作用…