[英]NodeJs convert PNG to SVG?
我搜索了一个将 PNG 或 JPEG 图像转换为 SVG Vectordrawing 的解决方案。 我发现了很多“将 SVG 转换为 PNG”,但对将 PNG 转换为 SVG 一无所知。 有人可以帮我吗?
基于原始Potrace,有一个名为node-potrace的 npm 包,用于从位图图像生成 SVG 轮廓。
Potrace 是一种用于跟踪位图的工具,这意味着将位图转换为平滑、可缩放的图像。 吨
我正在尝试将不同的图像跟踪库收集到一个项目中,目前是potrace、imagetracerjs 和 geometrize:(WIP / 非常新的项目)
浏览器/ node.js中:API: https://www.npmjs.com/package/svg-png-converter
命令行工具: https : //www.npmjs.com/package/svg-png-converter-cli
用户友好的游乐场(WIP): https : //cancerberosgx.github.io/demos/bitmap2vector-converter/
没有那么友好的操场(只有potrace实现): https ://cancerberosgx.github.io/demos/svg-png-converter/playground/#
对于像图像这样的标志绘图,它工作正常。 对于照片,它几乎可以完全复制它,但是生成的 svg 太复杂了。
该库将使用 svgo 优化生成的 SVG,这大大简化并减小了其大小。
如果有人知道另一个 JS 图像跟踪库,请发表评论。
如果要将多个 png 文件转换为 svg,可以使用此脚本。
const fs = require('fs')
const potrace = require('potrace')
const convertFolderPath = 'converts'
const files = [
'file 1',
'file 2'
]
const convertFile = file => {
return new Promise((resolve, reject) => {
potrace.trace(file, (err, svg) => {
if (err) reject(err)
const splitFilePath = file.split('/')
const filename = splitFilePath[splitFilePath.length - 1]
const splitFilename = filename.split('.')
splitFilename[splitFilename.length - 1] = 'svg'
const newFilename = splitFilename.join('.')
const outputPath = `${convertFolderPath}/${newFilename}`
fs.writeFileSync(outputPath, svg)
resolve(true)
})
})
}
if (!fs.existsSync(convertFolderPath)) {
fs.mkdirSync(convertFolderPath)
}
let convertedFiles = 0
files.forEach(async file => {
await convertFile(file)
convertedFiles++
console.log(`${convertedFiles}/${files.length} converted`)
})
PNG 转 SVG 类似于 JPG 转 SVG
引用这个答案
三个选项
使用在线转换的 API
http://apiv2.online-convert.com/
运行您自己的 node.js 服务器并使用 Potrace 或 AutoTrace
https://www.npmjs.com/package/potrace用于在线转换https://www.npmjs.com/package/autotrace
或者使用 imagetracerjs 客户端。
如果你想进入选项 2,我已经在https://github.com/piercus/nodeJpg2SVG上制作了一个实现potrace的nodejs服务器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.