2015-06-22 346 views
1

我已经编写了一个脚本来生成SVG文件,并在圆圈中显示1个数字。这是用于绘图应用程序作为剪贴画。在SVG中生成数字圆 - 如何居中文本

下面是脚本:

if [ ! -d circleNums ] 
then 
    mkdir circleNums 
fi 
rm circleNums/index.html 
# Add this line for center guide <line x1="63" y1="0" x2="63" y2="128" style="stroke:rgb(255,127,64);stroke-width:2"/> 
for I in {1..9} 
do 
    cat <<EOF > circleNums/$I.svg 
<svg width='128' height='128' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' version='1.1' > 
<circle cx="64" cy="64" r="62" fill="rgb(0,100,0)" stroke="red" stroke-width="2"/> 
<text x="35" y="95" font-family="sans-serif" font-size="90px" fill="white">$I</text> 
</svg> 
EOF 
    echo "<img src=\"$I.svg\" >" >> circleNums/index.html 
done 
for I in {10..99} 
do 
    cat <<EOF > circleNums/$I.svg 
<svg width='128' height='128' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' version='1.1' > 
<circle cx="64" cy="64" r="62" fill="rgb(0,100,0)" stroke="red" stroke-width="2"/> 
<text x="15" y="95" font-family="sans-serif" font-size="90px" fill="white">$I</text> 
</svg> 
EOF 
    echo "<img src=\"$I.svg\" >" >> circleNums/index.html 
done 
ls circleNums 

输出,1.svg的例子:

<svg width='128' height='128' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' version='1.1' > 
<circle cx="64" cy="64" r="62" fill="rgb(0,100,0)" stroke="red" stroke-width="2"/> 
<text x="35" y="95" font-family="sans-serif" font-size="90px" fill="white">1</text> 
</svg> 

99.svg:

<svg width='128' height='128' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' version='1.1' > 
<circle cx="64" cy="64" r="62" fill="rgb(0,100,0)" stroke="red" stroke-width="2"/> 
<text x="15" y="95" font-family="sans-serif" font-size="90px" fill="white">99</text> 
</svg> 

正如你所看到的定心是猜测工作和实验为基础。如何让文本以某个特定点为中心,在这种情况下x = 64,y = 64?

+0

和for循环可以与一个被更新为'用于我在{1..99}' – BMW

+0

之所以具有单独的循环是为了使不同的中心可以用于单数和双数数字。该脚本是用于生成SVG的一个扔掉的脚本,所以我做得很快而且很脏。 – TenG

回答

0

我做了小幅改动剧本:

  1. 我合并两个环路成一个
  2. 我更换xy50%就像你从
  3. 我用text-anchor="middle"属性居中文本期待使文本呈现居中(相对于图像中心)
  4. 我用dy=".35em"来纠正垂直偏移 - 它对我来说看起来足够好。其他字体可能需要其他值。

if [ ! -d circleNums ] 
then 
    mkdir circleNums 
fi 
rm circleNums/index.html 
# Add this line for center guide <line x1="63" y1="0" x2="63" y2="128" style="stroke:rgb(255,127,64);stroke-width:2"/> 
for I in {1..99} 
do 
    cat <<EOF > circleNums/$I.svg 
<svg width='128' height='128' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg' version='1.1' > 
<circle cx="64" cy="64" r="62" fill="rgb(0,100,0)" stroke="red" stroke-width="2"/> 
<text text-anchor="middle" x="50%" y="50%" dy=".35em" font-family="sans-serif" font-size="90px" fill="white">$I</text> 
</svg> 
EOF 
    echo "<img src=\"$I.svg\" >" >> circleNums/index.html 
done 
ls circleNums 

结果:

result

+0

太棒了 - 我看到你也在index.html查看器文件中找到了。谢谢你的帮助。重新设计两个循环 - 分别处理单位和双位数定位是一种快速且肮脏的方式。 – TenG