2015-09-25 80 views
3

我使用potrace将png文件转换为svg。 PNG是透明背景上的黑色,具有透明度级别。我想在svg输出中报告它们。可能吗 ?Potrace跳过alpha透明并将其变成黑色。PNG与alpha透明SVG与potrace

这里是我的命令:

convert -alpha Remove file.png pgm: | potrace --svg -o file.svg 

PNG: http://i.imgur.com/d2ZYrf6.png

SVG输出(.SVG在现实中,但你可以在PNG直接结果见): http://i.imgur.com/n1NsNYQ.png

谢谢!

+1

卸下透明度应该工作,但也许你这样做是不对的或那样的原因。你可以看看这个:http://www.riverrockapps.com/post/convert-white-transparent-png-to-svg –

+0

谢谢philippe_b。我之前看过这个页面,但没有透明度级别,它只有透明背景上的全白(或黑色)PNG。 – Lolo

+1

我试图转换你的照片,只是为了看看会发生什么。我想现在我明白了这个问题:所有非白色区域都变成黑色,而你期望黑色(对于“前景男人”)和灰色(对于两个“背景男人”)。我最初用我自己的照片得到的是一个*全黑* SVG,所以这毕竟不是同一个问题。你有没有尝试不同的位图格式?我用PBM格式获得了一些不同,尽管这不是你想要的。 –

回答

4

@Lolo。我不认为只有potrace的管道可以做你想做的。从手册页:

potrace算法需要一个位图,因此输入 图像的所有像素在处理开始之前都会转换为黑色或白色。

@philippe_b。我遇到了同样的问题,即

convert foo.png foo.pbm && potrace foo.pbm -s -o foo.svg 

给了我一个全黑输出图像。顺便说一下,这实际上发生在PNG-> PBM阶段。我的图片透明的阿尔法。这是我工作的解决方案

pngtopnm -mix assign.png > a.pnm && potrace a.pnm -s -o a.svg 

这里有一个脚本来做到这一点分批

#!/bin/bash 

for src in *.png; do 
    name=`basename $src .png` 
    pnm="$name.pnm" 
    svg="$name.svg" 
    pngtopnm -mix $src > $pnm && potrace $pnm -s -o $svg && rm $pnm 
    # set colour 
    # sed -i "s/#000000/#016b8f/g" *.svg 
    # same for PNG 
    # mogrify -fill '#016b8f' -opaque black *.png 
done