PNG в SVG — это трассировка и векторизация изображений — преобразование растрового изображения (jpg/png) в векторное изображение (svg).
Если вас ошеломило разнообразие вариантов, общее мнение таково:
Для достижения наилучших результатов с изображениями с низким разрешением предварительно обработайте их с помощью средства масштабирования изображений AI, а затем векторизуйте.
Многие из перечисленных ниже приложений не имеют версий для командной строки, и их нецелесообразно размещать в Интернете. Однако они поддерживают сценарии с такими приложениями, как Keyboard Maestro и AutoHotkey.
Чтобы разместить свой собственный конвертер в Интернете, ознакомьтесь со спецификациями открытого исходного кода и примерами кода ниже.
Я всегда ищу альтернативное программное обеспечение для векторизации! Создайте задачу на GitHub, и я добавлю ее в список.
Первоначальной целью этого документа было описание спецификации бессерверных функций NodeJS для преобразования растровых изображений в SVG и ссылки на другие репозитории для реализации.
Таким образом, остальная часть документа служит простой спецификацией того, как следует структурировать запросы и ответы для преобразования растровых изображений в SVG. Проверьте соответствующие репозитории для реализации спецификации.
Трассировка изображений
Бессерверный
function ImageInput ( ) {
const [ files , setFiles ] = React . useState < File [ ] > ( ) ;
const onSubmit = ( event ) => {
event . preventDefault ( ) ;
if ( ! files ?. length ) return ;
async function getSvg ( ) {
try {
const formData = new FormData ( ) ;
files . forEach ( ( file , index ) =>
formData . append ( `image- ${ index } ` , file , file . name )
) ;
const response = await axios . post ( url , formData , {
headers : {
"Content-Type" : "multipart/form-data" ,
} ,
} ) ;
} catch ( error ) {
console . log ( error )
}
}
getSvg ( ) ;
} ;
return (
< form onSubmit = { onSubmit } >
< input
id = "file"
name = "file"
type = "file"
multiple
required
accept = "image/jpeg, image/png, image/webp, image/gif, image/svg+xml, image/heic"
onChange = { ( event ) => {
const files = Array . from ( event . target . files ) ;
if ( files ?. length ) {
setFiles ( files ) ;
}
} }
/ >
< / form >
) ;
}
{
"algorithm" : " imagetracerjs " ,
"files" : [
{
"fieldName" : " image-1 " ,
"originalName" : " demo-one.png " ,
"svg" : " <svg>…</svg> "
},
{
"fieldName" : " image-2 " ,
"originalName" : " demo-two.jpg " ,
"svg" : " <svg>…</svg> "
}
]
}
Чтобы поддержать дальнейшее развитие этого проекта, рассмотрите возможность пожертвования.
Вклады приветствуются.