我正在尝试在Inkscape中使用these excellent weather glyphs,而不是在浏览器中使用字体。有没有办法可以将它们转换为我可以导入的常规SVG文件?
非常感谢, 亚历
答案 0 :(得分:2)
您最好的选择是从该项目的网络page下载字体并将其安装到您的系统中。您没有指定正在使用的操作系统,但在大多数情况下,它就像双击字体文件一样简单,并且可能会询问您是否要安装该字体。在此之后,您可以在接受它们的程序中使用这些字体系统(在我的情况下,我在从项目页面解压缩下载后安装了weather-icons-master / font /文件夹中的.ttf文件;我正在运行Ubuntu Trusty 14.04)
在Inkscape中你可以创建一个文本框,按Ctrl + U,输入你想要的字形的unicode,然后按回车键,你会看到天气字形,如果你把字体改成了'天气图标&# 39 ;.例如,在文本框内,按Ctrl + U,然后按f00d,然后输入将生成' wi-day-sunny'字形(提供链接中的第一个字形)。
在您的问题中,您可以参考将字体转换为常规SVG'您可以导入的文件。我将假设你的意思是路径和路径组。
要将字体转换为路径,请选择文本区域,然后单击路径>对象到路径。
如果您有多个字形,则可以将它们取消组合,直到找到各个字形,然后您可以根据需要修改,导出和进一步操作。
我在使用Font Awesome之前遇到过这个问题,现在看看这个问题:我不想手动为我想要在资产管道中使用的所有字形键入Unicode。这是一种半自动方式,可以获取特定字体系列提供的所有图标字体的列表。 警告:我将在文本编辑器(Atom)中使用正则表达式查找和替换
<flowPara></flowPara>
标记^((?!\&#x[0-9a-f]*;?<\/).)*$
替换:无^(.*)(&#x[0-9a-f]*)(.*)$
替换:$2;
\n
替换:无<flowPara></flowPara>
之间,重新保存和在Inkscape中打开。这对我来说既适用于天气字形,也适用于Font Awesome。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
id="svg2"
viewBox="0 0 744.09448819 1052.3622047"
height="297mm"
width="210mm">
<defs
id="defs4" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<flowRoot
style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot4136"
xml:space="preserve"><flowRegion
id="flowRegion4138"><rect
y="17.991203"
x="19.104477"
height="1023.4542"
width="715.05328"
id="rect4140" /></flowRegion><flowPara
style="font-size:50px;-inkscape-font-specification:'Weather Icons';font-family:'Weather Icons';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
id="flowPara4142"></flowPara></flowRoot> <flowRoot
style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:sans-serif;font-style:normal;font-weight:normal;font-size:10px;line-height:125%;letter-spacing:0px;word-spacing:0px"
id="flowRoot4148"
xml:space="preserve"><flowRegion
id="flowRegion4150"><rect
y="612.95923"
x="122.8145"
height="379.36035"
width="84.605545"
id="rect4152" /></flowRegion><flowPara
id="flowPara4154"></flowPara></flowRoot> </g>
</svg>
答案 1 :(得分:0)
我最终使用了method outlined by Gabi at Helpful Sheep。这是我用来将.svg文件拆分成一堆单独的.svg文件的代码:
import sys
if len(sys.argv) < 2:
print 'Usage: python {} webfont-file.svg'.format(sys.argv[0])
sys.exit()
with open(sys.argv[1], 'r') as r:
lines = r.read().split('\n')
glyphs = [x for x in lines if '<glyph' in x]
# for every glyph element in the file
for i in range(0, len(glyphs)):
with open(str(i + 1).rjust(3, '0') + '.svg', 'w') as w:
w.write('<?xml version="1.0" standalone="no"?>\n')
w.write('<svg width="1500px" height="1500px" version="1.1" xmlns="http://www.w3.org/2000/svg">\n')
# replace 'glyph' with 'path' and flip vertically
w.write(glyphs[i].replace('<glyph', '<path transform="scale(1, -1) translate(0, -1500)"') + '\n')
w.write('</svg>')
最大的问题是单个SVG没有标记,所以我不得不去手动识别哪些是我想要的。经过一段时间盲目地绊倒文件后,我认为使用地图会更简单,所以我制作了上面程序的一个版本,将所有内容转储到一个SVG中,所以我可以退出什么文件是什么:
import sys
if len(sys.argv) < 2:
print 'Usage: python {} webfont-file.svg'.format(sys.argv[0])
sys.exit()
with open(sys.argv[1], 'r') as r:
lines = r.read().split('\n')
glyphs = [x for x in lines if '<glyph' in x]
# for every glyph element in the file
with open(str(1).rjust(3, '0') + '.svg', 'w') as w:
w.write('<?xml version="1.0" standalone="no"?>\n')
w.write('<svg width="1500px" height="1500px" version="1.1" xmlns="http://www.w3.org/2000/svg">\n')
for i in range(0, len(glyphs)):
# replace 'glyph' with 'path' and flip vertically
x = 3000 * i
w.write(glyphs[i].replace('<glyph', '<path transform="scale(1, -1) translate({}, -1500)"'.format(x)) + '\n')
w.write('</svg>')