NodeJs将PNG转换为SVG?

时间:2018-03-29 04:35:00

标签: javascript node.js html5 svg png

我搜索解决方案以将PNG或JPEG图像转换为SVG Vectordrawing。我发现很多"将SVG转换为PNG"但没有关于将PNG转换为SVG的信息。有人可以帮我吗?

4 个答案:

答案 0 :(得分:1)

在原始Potrace的基础上,有一个名为node-potrace的npm软件包,用于从位图图像生成SVG轮廓。

  

Potrace是用于跟踪位图的工具,这意味着将位图转换为平滑的可缩放图像。 T

演示:http://kilobtye.github.io/potrace/

demo

答案 1 :(得分:0)

PNG到SVG类似于JPG到SVG

引用This answer

  

三个选项

     

使用在线转换的API

     

http://apiv2.online-convert.com/

     

运行您自己的node.js服务器并使用Potrace或AutoTrace

     在线转换使用的

https://www.npmjs.com/package/potrace   https://www.npmjs.com/package/autotrace

     

或者使用imagetracerjs客户端。

     

https://github.com/jankovicsandras/imagetracerjs

如果你想进入选项2,我已经在https://github.com/piercus/nodeJpg2SVG上建立了一个实现potrace的nodejs服务器

答案 2 :(得分:0)

我正在尝试将不同的图像跟踪库收集到一个项目中,目前这里是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太复杂了。

该库将使用svgo优化生成的SVG,从而大大简化和减小其大小。

如果有人知道另一个JS图像跟踪库,请发表评论。

答案 3 :(得分:0)

如果要将多个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`)
})