在python中将svg坐标移动和优化到网格

2024-04-28 09:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理从GIMP导出的.svg文件。我需要将每条路径上的节点移动到最近的顶点(在70px网格上)并删除重复的节点

示例.svg如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
              "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">

<svg xmlns="http://www.w3.org/2000/svg"
     width="1283.95mm" height="1037.04mm"
     viewBox="0 0 3640 2940">
  <path id="Selection"
        fill="none" stroke="black" stroke-width="1"
        d="M 1475.00,205.00
           C 1475.00,225.21 1471.02,215.59 1471.00,231.00
             1471.00,231.00 1471.00,329.00 1471.00,329.00
             1471.00,331.56 1470.89,334.55 1471.65,337.00
             1472.95,341.22 1476.88,346.28 1481.01,347.99
             1484.25,349.34 1489.44,349.00 1493.00,349.00
             1493.00,349.00 1515.00,349.00 1515.00,349.00
             1515.00,349.00 1660.00,349.00 1660.00,349.00
             1662.50,349.00 1665.62,349.11 1668.00,348.35
             1682.12,343.87 1679.00,324.35 1679.00,313.00
             1679.00,313.00 1679.00,231.00 1679.00,231.00
             1678.98,215.59 1675.00,225.21 1675.00,205.25
             1675.00,205.25 1685.00,205.25 1685.00,205.25
             1685.00,205.25 1698.00,209.00 1698.00,209.00
             1698.00,209.00 1731.00,209.00 1731.00,209.00
             1731.00,209.00 1755.00,205.00 1755.00,205.00
             1755.00,205.00 1755.00,209.00 1755.00,209.00
             1754.97,222.24 1751.16,217.55 1751.00,229.00
             1751.00,229.00 1751.00,314.00 1751.00,314.00
             1751.00,314.00 1751.00,469.00 1751.00,469.00
             1751.02,484.41 1755.00,474.79 1755.00,494.75
             1755.00,494.75 1745.00,494.75 1745.00,494.75
             1745.00,494.75 1732.00,491.00 1732.00,491.00
             1732.00,491.00 1630.00,491.00 1630.00,491.00
             1630.00,491.00 1605.00,495.00 1605.00,495.00
             1605.00,474.79 1608.98,484.41 1609.00,469.00
             1609.00,469.00 1609.00,441.00 1609.00,441.00
             1608.99,433.51 1607.29,426.29 1599.96,422.45
             1596.23,420.50 1590.22,421.00 1586.00,421.00
             1586.00,421.00 1559.00,421.00 1559.00,421.00
             1547.59,421.06 1541.16,427.47 1541.00,439.00
             1541.00,439.00 1541.00,470.00 1541.00,470.00
             1541.05,480.13 1542.88,477.97 1544.75,484.00
             1545.21,486.62 1545.00,492.08 1544.75,494.75
             1544.75,494.75 1535.00,494.75 1535.00,494.75
             1535.00,494.75 1522.00,491.00 1522.00,491.00
             1522.00,491.00 1420.00,491.00 1420.00,491.00
             1420.00,491.00 1395.00,495.00 1395.00,495.00
             1395.00,495.00 1395.00,491.00 1395.00,491.00
             1395.03,477.76 1398.84,482.45 1399.00,471.00
             1399.00,471.00 1399.00,386.00 1399.00,386.00
             1399.00,386.00 1399.00,231.00 1399.00,231.00
             1398.98,215.59 1395.00,225.21 1395.00,205.25
             1395.00,205.25 1405.00,205.25 1405.00,205.25
             1405.00,205.25 1418.00,209.00 1418.00,209.00
             1418.00,209.00 1451.00,209.00 1451.00,209.00
             1451.00,209.00 1475.00,205.00 1475.00,205.00 Z
           M 2035.00,1255.00
           C 2035.00,1255.00 2035.00,1260.00 2035.00,1260.00
             2034.92,1272.31 2031.02,1266.58 2031.00,1281.00
             2031.00,1281.00 2031.00,1449.00 2031.00,1449.00
             2031.02,1464.41 2035.00,1454.79 2035.00,1474.75
             2035.00,1474.75 2025.00,1474.75 2025.00,1474.75
             2025.00,1474.75 2012.00,1471.00 2012.00,1471.00
             2012.00,1471.00 1910.00,1471.00 1910.00,1471.00
             1910.00,1471.00 1885.00,1475.00 1885.00,1475.00
             1885.00,1475.00 1885.00,1465.00 1885.00,1465.00
             1903.68,1465.00 1894.73,1468.98 1910.00,1469.00
             1910.00,1469.00 2010.00,1469.00 2010.00,1469.00
             2012.98,1469.00 2016.18,1469.16 2018.99,1467.99
             2023.12,1466.28 2027.05,1461.22 2028.35,1457.00
             2028.35,1457.00 2029.00,1425.00 2029.00,1425.00
             2029.00,1425.00 2029.00,1281.00 2029.00,1281.00
             2028.98,1267.66 2023.60,1261.02 2010.00,1261.00
             2010.00,1261.00 1916.00,1261.00 1916.00,1261.00
             1916.00,1261.00 1770.00,1261.00 1770.00,1261.00
             1767.02,1261.00 1763.82,1260.84 1761.01,1262.01
             1756.88,1263.72 1752.95,1268.78 1751.65,1273.00
             1751.65,1273.00 1751.00,1305.00 1751.00,1305.00
             1751.00,1305.00 1751.00,1449.00 1751.00,1449.00
             1751.01,1456.49 1752.71,1463.71 1760.04,1467.55
             1763.77,1469.50 1769.78,1469.00 1774.00,1469.00
             1774.00,1469.00 1800.00,1469.00 1800.00,1469.00
             1815.27,1468.98 1806.32,1465.00 1825.00,1465.00
             1825.00,1465.00 1825.00,1474.75 1825.00,1474.75
             1825.00,1474.75 1815.00,1474.75 1815.00,1474.75
             1815.00,1474.75 1802.00,1471.00 1802.00,1471.00
             1802.00,1471.00 1769.00,1471.00 1769.00,1471.00
             1769.00,1471.00 1745.00,1475.00 1745.00,1475.00
             1745.00,1475.00 1745.00,1470.00 1745.00,1470.00
             1745.08,1457.69 1748.98,1463.42 1749.00,1449.00
             1749.00,1449.00 1749.00,1281.00 1749.00,1281.00
             1748.98,1265.59 1745.00,1275.21 1745.00,1255.00
             1745.00,1255.00 1749.00,1255.00 1749.00,1255.00
             1749.00,1255.00 1770.00,1259.00 1770.00,1259.00
             1770.00,1259.00 2010.00,1259.00 2010.00,1259.00
             2010.00,1259.00 2035.00,1255.00 2035.00,1255.00 Z
           M 1054.75,2095.00
           C 1055.00,2097.92 1055.21,2103.38 1054.75,2106.00
             1053.06,2111.36 1051.12,2110.34 1051.00,2119.00
             1051.00,2119.00 1051.00,2219.00 1051.00,2219.00
             1051.02,2234.41 1055.00,2224.79 1055.00,2244.75
             1055.00,2244.75 1045.00,2244.75 1045.00,2244.75
             1045.00,2244.75 1032.00,2241.00 1032.00,2241.00
             1032.00,2241.00 999.00,2241.00 999.00,2241.00
             999.00,2241.00 975.25,2245.00 975.25,2245.00
             975.00,2242.08 974.79,2236.62 975.25,2234.00
             976.94,2228.64 978.88,2229.66 979.00,2221.00
             979.00,2221.00 979.00,2121.00 979.00,2121.00
             978.98,2105.59 975.00,2115.21 975.00,2095.25
             975.00,2095.25 985.00,2095.25 985.00,2095.25
             985.00,2095.25 998.00,2099.00 998.00,2099.00
             998.00,2099.00 1031.00,2099.00 1031.00,2099.00
             1031.00,2099.00 1054.75,2095.00 1054.75,2095.00 Z
           M 3447.00,2899.00
           C 3440.66,2897.20 3422.63,2898.43 3415.00,2898.18
             3415.00,2898.18 3379.00,2898.18 3379.00,2898.18
             3379.00,2898.18 3366.99,2898.18 3366.99,2898.18
             3366.99,2898.18 3361.42,2898.87 3361.42,2898.87
             3361.42,2898.87 3355.00,2898.04 3355.00,2898.04
             3344.76,2897.54 3340.14,2901.77 3340.00,2912.00
             3339.93,2917.84 3339.11,2925.22 3345.10,2928.55
             3349.34,2930.90 3353.58,2929.57 3358.00,2929.77
             3358.00,2929.77 3366.00,2929.77 3366.00,2929.77
             3366.00,2929.77 3413.00,2929.77 3413.00,2929.77
             3421.78,2929.42 3439.43,2931.15 3447.00,2929.00
             3447.01,2931.77 3446.67,2936.29 3448.74,2938.40
             3451.05,2940.76 3464.95,2940.76 3467.26,2938.40
             3469.33,2936.29 3468.99,2931.77 3469.00,2929.00
             3474.26,2930.50 3487.74,2929.97 3494.00,2930.00
             3504.82,2930.06 3502.45,2932.75 3511.00,2932.98
             3523.14,2933.32 3518.81,2930.02 3532.00,2930.00
             3532.00,2930.00 3619.00,2930.00 3619.00,2930.00
             3630.80,2929.94 3632.98,2926.21 3633.00,2915.00
             3633.01,2907.54 3633.86,2898.49 3624.00,2897.23
             3618.29,2896.49 3615.45,2899.85 3611.00,2901.09
             3611.00,2901.09 3599.00,2901.09 3599.00,2901.09
             3599.00,2901.09 3576.00,2901.09 3576.00,2901.09
             3569.17,2899.98 3573.24,2897.81 3559.00,2898.00
             3550.73,2898.11 3551.68,2899.93 3545.00,2901.12
             3545.00,2901.12 3530.00,2901.12 3530.00,2901.12
             3530.00,2901.12 3502.00,2901.12 3502.00,2901.12
             3502.00,2901.12 3492.00,2901.88 3492.00,2901.88
             3484.85,2901.36 3481.54,2895.44 3469.00,2899.00
             3468.97,2895.56 3469.08,2892.17 3466.99,2889.21
             3463.30,2883.98 3453.87,2883.66 3449.65,2888.39
             3446.93,2891.45 3447.04,2895.19 3447.00,2899.00 Z" />
</svg>

我需要将字符串中的每个数字替换为可被70整除的最接近的数字。一旦这样做,很可能会有重复的路径,因此应该删除它们,直到只剩下一个。问题是我完全不知道如何在python中最好地实现这一点

对于第一部分,可能使用regex查找所有数字,并将每个数字替换为以下内容: round(n / 70) * 70

对于第二个问题,我还不确定6个数字的每一行是否等于另一整行,或者只是其中的一些数字


Tags: 文件svgorg路径httpstroke节点www