Я ищу решение для преобразования изображения PNG или JPEG в векторный рисунок SVG. Я нашел много «Конвертировать SVG в PNG», но ничего о преобразовании PNG в SVG. Может кто-нибудь помочь мне, пожалуйста?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


PNG в SVG похож на JPG в SVG
Цитата Этот ответ
Three options
Use Online convert's API
http://apiv2.online-convert.com/
Run your own node.js server and use Potrace or AutoTrace
https://www.npmjs.com/package/potrace used by Online convert https://www.npmjs.com/package/autotrace
Or use imagetracerjs client side.
Если вы хотите перейти к варианту 2, я сделал сервер nodejs, реализующий potrace на https://github.com/piercus/nodeJpg2SVG
На основе оригинального Potrace существует пакет npm под названием узел-гонка для генерации силуэтов SVG из растровых изображений.
Potrace is a tool for tracing a bitmap, which means, transforming a bitmap into a smooth, scalable image. T
Демо: http://kilobtye.github.io/potrace/

Я пытаюсь собрать разные библиотеки трассировки изображений в один проект, в настоящее время potrace, imagetracerjs и geometrize здесь: (WIP / очень новый проект)
browser / 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 слишком сложен.
Библиотека оптимизирует получившийся SVG с помощью svgo, что значительно упростит и уменьшит его размер.
Если кто-нибудь знает о другой библиотеке трассировки изображений 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.info(`${convertedFiles}/${files.length} converted`)
})