Создание QR-кодов с шаблоном границы SVG с использованием Python3 - PullRequest
0 голосов
/ 05 июля 2019

Я использую библиотеку Python qrcode для генерации SVG QR-кода:

factory = qrcode.image.svg.SvgImage
img = qr.make_image(fill_color="black", back_color="white", image_factory=factory)

И у меня есть отдельное изображение SVG (border.svg). Как я могу интегрировать объект QR-кода (img) в svg границы для создания одного объединенного файла svg? Я нашел много библиотек svg для преобразования в png / eps, но ни одна из них не может просто объединить два изображения.

Бонус: граница (или изображение QR) должна быть масштабирована, чтобы соответствовать, потому что в зависимости от размера данных для QR-кода, размер QR svg варьируется.

1 Ответ

0 голосов
/ 09 июля 2019

Я немного разбирался в модуле Python SVG и не придумал ничего, что упростило бы проблему.

SVG на самом деле просто XML. Таким образом, вы можете редактировать XML SVG и изменять SVG. Python имеет хорошую встроенную поддержку XML (на самом деле * ML).

Основная идея - взять границу и получить ее размер. По размеру мы затем масштабируем код qr, чтобы он поместился внутри границы. Затем мы берем qr, добавляем его в SVG-XML и сохраняем в новый файл.

from lxml import etree

# Create XML objects
boarder = etree.parse('boarder.svg')
qr = etree.parse('qr.svg') # ET.parse('qr.svg').getroot()

# Get size of boarder
Bhight = int(boarder.xpath('//*[local-name()="svg"]/@width')[0])
Bwidth = int(boarder.xpath('//*[local-name()="svg"]/@height')[0])
# Make sure that it is a square
assert(Bhight == Bwidth)

# resize qr code for boarder.
qrBack = qr.xpath('//*[local-name()="svg"]//*[local-name()="g"]//*[local-name()="rect"]')[0]

# Also needs to be a square
assert(qrBack.attrib['height'] == qrBack.attrib['width'])

# Calc offset code from boarder
qrWidth = int(qrBack.attrib['width'])
offset = (Bwidth - qrWidth) / 2

# Add offset attribute
qr.xpath('//*[local-name()="svg"]//*[local-name()="g"]')[0].attrib['transform'] = 'translate({0},{0})'.format(offset)

# get qr code
QRC = qr.xpath('//*[local-name()="svg"]//*[local-name()="g"]')[0]
# Take Boarder as xml root
root = boarder.getroot()
# Add QRC to root
root.append(QRC)
# Write new svg to file
with open( 'boarder+qr.svg', 'w' ) as f:
    f.write( etree.tostring( root, pretty_print=True, xml_declaration=True, encoding='UTF-8', standalone="yes").decode() )

Создает файл boarder+qr.svg.

Для справки:

boarder.svg

<?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"
   id="svg8"
   version="1.1"
   height="110"
   width="110">
  <defs
     id="defs2" />
  <metadata
     id="metadata5">
    <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">
    <path
       id="rect1379"
       d="m 0,0 h 110 v 110 H 0 Z 0"
       style="
          stroke:#FFFFFF;
          stroke-width:0.89999998;
          stroke-linecap:round;
          stroke-linejoin:round;
          stroke-miterlimit:4;
          stroke-dasharray:none;
          stroke-dashoffset:0;
          stroke-opacity:1"
          />
  </g>
</svg>

qr.svg

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
   "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="99" height="99" version="1.1"
   xmlns="http://www.w3.org/2000/svg">
   <desc>Zint Generated Symbol
   </desc>

   <g id="barcode" fill="#000000">
      <rect x="0" y="0" width="100" height="100" fill="#FFFFFF" />
      <rect x="12.00" y="12.00" width="21.00" height="3.00" />
      <rect x="36.00" y="12.00" width="12.00" height="3.00" />
      <rect x="54.00" y="12.00" width="3.00" height="3.00" />
      <rect x="60.00" y="12.00" width="3.00" height="3.00" />
      <rect x="66.00" y="12.00" width="21.00" height="3.00" />
      <rect x="12.00" y="15.00" width="3.00" height="3.00" />
      <rect x="30.00" y="15.00" width="3.00" height="3.00" />
      <rect x="36.00" y="15.00" width="3.00" height="3.00" />
      <rect x="45.00" y="15.00" width="3.00" height="3.00" />
      <rect x="51.00" y="15.00" width="6.00" height="3.00" />
      <rect x="60.00" y="15.00" width="3.00" height="3.00" />
      <rect x="66.00" y="15.00" width="3.00" height="3.00" />
      <rect x="84.00" y="15.00" width="3.00" height="3.00" />
      <rect x="12.00" y="18.00" width="3.00" height="3.00" />
      <rect x="18.00" y="18.00" width="9.00" height="3.00" />
      <rect x="30.00" y="18.00" width="3.00" height="3.00" />
      <rect x="39.00" y="18.00" width="3.00" height="3.00" />
      <rect x="51.00" y="18.00" width="3.00" height="3.00" />
      <rect x="57.00" y="18.00" width="3.00" height="3.00" />
      <rect x="66.00" y="18.00" width="3.00" height="3.00" />
      <rect x="72.00" y="18.00" width="9.00" height="3.00" />
      <rect x="84.00" y="18.00" width="3.00" height="3.00" />
      <rect x="12.00" y="21.00" width="3.00" height="3.00" />
      <rect x="18.00" y="21.00" width="9.00" height="3.00" />
      <rect x="30.00" y="21.00" width="3.00" height="3.00" />
      <rect x="45.00" y="21.00" width="9.00" height="3.00" />
      <rect x="57.00" y="21.00" width="3.00" height="3.00" />
      <rect x="66.00" y="21.00" width="3.00" height="3.00" />
      <rect x="72.00" y="21.00" width="9.00" height="3.00" />
      <rect x="84.00" y="21.00" width="3.00" height="3.00" />
      <rect x="12.00" y="24.00" width="3.00" height="3.00" />
      <rect x="18.00" y="24.00" width="9.00" height="3.00" />
      <rect x="30.00" y="24.00" width="3.00" height="3.00" />
      <rect x="36.00" y="24.00" width="3.00" height="3.00" />
      <rect x="45.00" y="24.00" width="9.00" height="3.00" />
      <rect x="66.00" y="24.00" width="3.00" height="3.00" />
      <rect x="72.00" y="24.00" width="9.00" height="3.00" />
      <rect x="84.00" y="24.00" width="3.00" height="3.00" />
      <rect x="12.00" y="27.00" width="3.00" height="3.00" />
      <rect x="30.00" y="27.00" width="3.00" height="3.00" />
      <rect x="36.00" y="27.00" width="9.00" height="3.00" />
      <rect x="48.00" y="27.00" width="6.00" height="3.00" />
      <rect x="60.00" y="27.00" width="3.00" height="3.00" />
      <rect x="66.00" y="27.00" width="3.00" height="3.00" />
      <rect x="84.00" y="27.00" width="3.00" height="3.00" />
      <rect x="12.00" y="30.00" width="21.00" height="3.00" />
      <rect x="36.00" y="30.00" width="3.00" height="3.00" />
      <rect x="42.00" y="30.00" width="3.00" height="3.00" />
      <rect x="48.00" y="30.00" width="3.00" height="3.00" />
      <rect x="54.00" y="30.00" width="3.00" height="3.00" />
      <rect x="60.00" y="30.00" width="3.00" height="3.00" />
      <rect x="66.00" y="30.00" width="21.00" height="3.00" />
      <rect x="36.00" y="33.00" width="6.00" height="3.00" />
      <rect x="57.00" y="33.00" width="6.00" height="3.00" />
      <rect x="12.00" y="36.00" width="9.00" height="3.00" />
      <rect x="27.00" y="36.00" width="6.00" height="3.00" />
      <rect x="36.00" y="36.00" width="6.00" height="3.00" />
      <rect x="45.00" y="36.00" width="6.00" height="3.00" />
      <rect x="60.00" y="36.00" width="15.00" height="3.00" />
      <rect x="81.00" y="36.00" width="6.00" height="3.00" />
      <rect x="12.00" y="39.00" width="3.00" height="3.00" />
      <rect x="18.00" y="39.00" width="3.00" height="3.00" />
      <rect x="24.00" y="39.00" width="3.00" height="3.00" />
      <rect x="33.00" y="39.00" width="6.00" height="3.00" />
      <rect x="48.00" y="39.00" width="3.00" height="3.00" />
      <rect x="54.00" y="39.00" width="9.00" height="3.00" />
      <rect x="66.00" y="39.00" width="6.00" height="3.00" />
      <rect x="75.00" y="39.00" width="3.00" height="3.00" />
      <rect x="81.00" y="39.00" width="6.00" height="3.00" />
      <rect x="15.00" y="42.00" width="3.00" height="3.00" />
      <rect x="21.00" y="42.00" width="3.00" height="3.00" />
      <rect x="30.00" y="42.00" width="3.00" height="3.00" />
      <rect x="36.00" y="42.00" width="9.00" height="3.00" />
      <rect x="48.00" y="42.00" width="3.00" height="3.00" />
      <rect x="57.00" y="42.00" width="3.00" height="3.00" />
      <rect x="72.00" y="42.00" width="9.00" height="3.00" />
      <rect x="84.00" y="42.00" width="3.00" height="3.00" />
      <rect x="18.00" y="45.00" width="6.00" height="3.00" />
      <rect x="33.00" y="45.00" width="6.00" height="3.00" />
      <rect x="42.00" y="45.00" width="9.00" height="3.00" />
      <rect x="57.00" y="45.00" width="3.00" height="3.00" />
      <rect x="69.00" y="45.00" width="3.00" height="3.00" />
      <rect x="75.00" y="45.00" width="3.00" height="3.00" />
      <rect x="15.00" y="48.00" width="3.00" height="3.00" />
      <rect x="24.00" y="48.00" width="9.00" height="3.00" />
      <rect x="39.00" y="48.00" width="6.00" height="3.00" />
      <rect x="48.00" y="48.00" width="3.00" height="3.00" />
      <rect x="57.00" y="48.00" width="6.00" height="3.00" />
      <rect x="66.00" y="48.00" width="6.00" height="3.00" />
      <rect x="84.00" y="48.00" width="3.00" height="3.00" />
      <rect x="21.00" y="51.00" width="9.00" height="3.00" />
      <rect x="39.00" y="51.00" width="6.00" height="3.00" />
      <rect x="57.00" y="51.00" width="6.00" height="3.00" />
      <rect x="66.00" y="51.00" width="6.00" height="3.00" />
      <rect x="81.00" y="51.00" width="6.00" height="3.00" />
      <rect x="12.00" y="54.00" width="12.00" height="3.00" />
      <rect x="30.00" y="54.00" width="3.00" height="3.00" />
      <rect x="39.00" y="54.00" width="27.00" height="3.00" />
      <rect x="69.00" y="54.00" width="12.00" height="3.00" />
      <rect x="84.00" y="54.00" width="3.00" height="3.00" />
      <rect x="18.00" y="57.00" width="3.00" height="3.00" />
      <rect x="24.00" y="57.00" width="3.00" height="3.00" />
      <rect x="33.00" y="57.00" width="3.00" height="3.00" />
      <rect x="39.00" y="57.00" width="3.00" height="3.00" />
      <rect x="45.00" y="57.00" width="3.00" height="3.00" />
      <rect x="54.00" y="57.00" width="12.00" height="3.00" />
      <rect x="69.00" y="57.00" width="3.00" height="3.00" />
      <rect x="12.00" y="60.00" width="6.00" height="3.00" />
      <rect x="21.00" y="60.00" width="3.00" height="3.00" />
      <rect x="30.00" y="60.00" width="3.00" height="3.00" />
      <rect x="39.00" y="60.00" width="9.00" height="3.00" />
      <rect x="60.00" y="60.00" width="15.00" height="3.00" />
      <rect x="81.00" y="60.00" width="3.00" height="3.00" />
      <rect x="36.00" y="63.00" width="15.00" height="3.00" />
      <rect x="60.00" y="63.00" width="3.00" height="3.00" />
      <rect x="72.00" y="63.00" width="3.00" height="3.00" />
      <rect x="78.00" y="63.00" width="3.00" height="3.00" />
      <rect x="84.00" y="63.00" width="3.00" height="3.00" />
      <rect x="12.00" y="66.00" width="21.00" height="3.00" />
      <rect x="45.00" y="66.00" width="3.00" height="3.00" />
      <rect x="54.00" y="66.00" width="3.00" height="3.00" />
      <rect x="60.00" y="66.00" width="3.00" height="3.00" />
      <rect x="66.00" y="66.00" width="3.00" height="3.00" />
      <rect x="72.00" y="66.00" width="6.00" height="3.00" />
      <rect x="84.00" y="66.00" width="3.00" height="3.00" />
      <rect x="12.00" y="69.00" width="3.00" height="3.00" />
      <rect x="30.00" y="69.00" width="3.00" height="3.00" />
      <rect x="36.00" y="69.00" width="6.00" height="3.00" />
      <rect x="54.00" y="69.00" width="3.00" height="3.00" />
      <rect x="60.00" y="69.00" width="3.00" height="3.00" />
      <rect x="72.00" y="69.00" width="3.00" height="3.00" />
      <rect x="84.00" y="69.00" width="3.00" height="3.00" />
      <rect x="12.00" y="72.00" width="3.00" height="3.00" />
      <rect x="18.00" y="72.00" width="9.00" height="3.00" />
      <rect x="30.00" y="72.00" width="3.00" height="3.00" />
      <rect x="45.00" y="72.00" width="3.00" height="3.00" />
      <rect x="54.00" y="72.00" width="24.00" height="3.00" />
      <rect x="81.00" y="72.00" width="3.00" height="3.00" />
      <rect x="12.00" y="75.00" width="3.00" height="3.00" />
      <rect x="18.00" y="75.00" width="9.00" height="3.00" />
      <rect x="30.00" y="75.00" width="3.00" height="3.00" />
      <rect x="42.00" y="75.00" width="9.00" height="3.00" />
      <rect x="54.00" y="75.00" width="3.00" height="3.00" />
      <rect x="60.00" y="75.00" width="6.00" height="3.00" />
      <rect x="72.00" y="75.00" width="12.00" height="3.00" />
      <rect x="12.00" y="78.00" width="3.00" height="3.00" />
      <rect x="18.00" y="78.00" width="9.00" height="3.00" />
      <rect x="30.00" y="78.00" width="3.00" height="3.00" />
      <rect x="36.00" y="78.00" width="12.00" height="3.00" />
      <rect x="51.00" y="78.00" width="3.00" height="3.00" />
      <rect x="57.00" y="78.00" width="6.00" height="3.00" />
      <rect x="72.00" y="78.00" width="3.00" height="3.00" />
      <rect x="81.00" y="78.00" width="6.00" height="3.00" />
      <rect x="12.00" y="81.00" width="3.00" height="3.00" />
      <rect x="30.00" y="81.00" width="3.00" height="3.00" />
      <rect x="36.00" y="81.00" width="15.00" height="3.00" />
      <rect x="54.00" y="81.00" width="12.00" height="3.00" />
      <rect x="69.00" y="81.00" width="6.00" height="3.00" />
      <rect x="12.00" y="84.00" width="21.00" height="3.00" />
      <rect x="36.00" y="84.00" width="9.00" height="3.00" />
      <rect x="51.00" y="84.00" width="3.00" height="3.00" />
      <rect x="60.00" y="84.00" width="6.00" height="3.00" />
      <rect x="75.00" y="84.00" width="3.00" height="3.00" />
      <rect x="84.00" y="84.00" width="3.00" height="3.00" />
   </g>
</svg>

Возможно, вам придется изменить несколько вещей, чтобы правильно ориентировать исходные SVG, но это должно дать вам хорошую отправную точку.

жилец + qr.svg

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<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" id="svg8" version="1.1" height="110" width="110">
  <defs id="defs2"/>
  <metadata id="metadata5">
    <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/>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g id="layer1">
    <path id="rect1379" d="m 0,0 h 110 v 110 H 0 Z 0" style="        stroke:#FFFFFF;        stroke-width:0.89999998;        stroke-linecap:round;        stroke-linejoin:round;        stroke-miterlimit:4;        stroke-dasharray:none;        stroke-dashoffset:0;        stroke-opacity:1"/>
  </g>
<svg:g id="barcode" fill="#000000" transform="translate(5.0,5.0)">
      <svg:rect x="0" y="0" width="100" height="100" fill="#FFFFFF"/>
      <svg:rect x="12.00" y="12.00" width="21.00" height="3.00"/>
      <svg:rect x="36.00" y="12.00" width="12.00" height="3.00"/>
      <svg:rect x="54.00" y="12.00" width="3.00" height="3.00"/>
      <svg:rect x="60.00" y="12.00" width="3.00" height="3.00"/>
      <svg:rect x="66.00" y="12.00" width="21.00" height="3.00"/>
      <svg:rect x="12.00" y="15.00" width="3.00" height="3.00"/>
      <svg:rect x="30.00" y="15.00" width="3.00" height="3.00"/>
      <svg:rect x="36.00" y="15.00" width="3.00" height="3.00"/>
      <svg:rect x="45.00" y="15.00" width="3.00" height="3.00"/>
      <svg:rect x="51.00" y="15.00" width="6.00" height="3.00"/>
      <svg:rect x="60.00" y="15.00" width="3.00" height="3.00"/>
      <svg:rect x="66.00" y="15.00" width="3.00" height="3.00"/>
      <svg:rect x="84.00" y="15.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="18.00" width="3.00" height="3.00"/>
      <svg:rect x="18.00" y="18.00" width="9.00" height="3.00"/>
      <svg:rect x="30.00" y="18.00" width="3.00" height="3.00"/>
      <svg:rect x="39.00" y="18.00" width="3.00" height="3.00"/>
      <svg:rect x="51.00" y="18.00" width="3.00" height="3.00"/>
      <svg:rect x="57.00" y="18.00" width="3.00" height="3.00"/>
      <svg:rect x="66.00" y="18.00" width="3.00" height="3.00"/>
      <svg:rect x="72.00" y="18.00" width="9.00" height="3.00"/>
      <svg:rect x="84.00" y="18.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="21.00" width="3.00" height="3.00"/>
      <svg:rect x="18.00" y="21.00" width="9.00" height="3.00"/>
      <svg:rect x="30.00" y="21.00" width="3.00" height="3.00"/>
      <svg:rect x="45.00" y="21.00" width="9.00" height="3.00"/>
      <svg:rect x="57.00" y="21.00" width="3.00" height="3.00"/>
      <svg:rect x="66.00" y="21.00" width="3.00" height="3.00"/>
      <svg:rect x="72.00" y="21.00" width="9.00" height="3.00"/>
      <svg:rect x="84.00" y="21.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="24.00" width="3.00" height="3.00"/>
      <svg:rect x="18.00" y="24.00" width="9.00" height="3.00"/>
      <svg:rect x="30.00" y="24.00" width="3.00" height="3.00"/>
      <svg:rect x="36.00" y="24.00" width="3.00" height="3.00"/>
      <svg:rect x="45.00" y="24.00" width="9.00" height="3.00"/>
      <svg:rect x="66.00" y="24.00" width="3.00" height="3.00"/>
      <svg:rect x="72.00" y="24.00" width="9.00" height="3.00"/>
      <svg:rect x="84.00" y="24.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="27.00" width="3.00" height="3.00"/>
      <svg:rect x="30.00" y="27.00" width="3.00" height="3.00"/>
      <svg:rect x="36.00" y="27.00" width="9.00" height="3.00"/>
      <svg:rect x="48.00" y="27.00" width="6.00" height="3.00"/>
      <svg:rect x="60.00" y="27.00" width="3.00" height="3.00"/>
      <svg:rect x="66.00" y="27.00" width="3.00" height="3.00"/>
      <svg:rect x="84.00" y="27.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="30.00" width="21.00" height="3.00"/>
      <svg:rect x="36.00" y="30.00" width="3.00" height="3.00"/>
      <svg:rect x="42.00" y="30.00" width="3.00" height="3.00"/>
      <svg:rect x="48.00" y="30.00" width="3.00" height="3.00"/>
      <svg:rect x="54.00" y="30.00" width="3.00" height="3.00"/>
      <svg:rect x="60.00" y="30.00" width="3.00" height="3.00"/>
      <svg:rect x="66.00" y="30.00" width="21.00" height="3.00"/>
      <svg:rect x="36.00" y="33.00" width="6.00" height="3.00"/>
      <svg:rect x="57.00" y="33.00" width="6.00" height="3.00"/>
      <svg:rect x="12.00" y="36.00" width="9.00" height="3.00"/>
      <svg:rect x="27.00" y="36.00" width="6.00" height="3.00"/>
      <svg:rect x="36.00" y="36.00" width="6.00" height="3.00"/>
      <svg:rect x="45.00" y="36.00" width="6.00" height="3.00"/>
      <svg:rect x="60.00" y="36.00" width="15.00" height="3.00"/>
      <svg:rect x="81.00" y="36.00" width="6.00" height="3.00"/>
      <svg:rect x="12.00" y="39.00" width="3.00" height="3.00"/>
      <svg:rect x="18.00" y="39.00" width="3.00" height="3.00"/>
      <svg:rect x="24.00" y="39.00" width="3.00" height="3.00"/>
      <svg:rect x="33.00" y="39.00" width="6.00" height="3.00"/>
      <svg:rect x="48.00" y="39.00" width="3.00" height="3.00"/>
      <svg:rect x="54.00" y="39.00" width="9.00" height="3.00"/>
      <svg:rect x="66.00" y="39.00" width="6.00" height="3.00"/>
      <svg:rect x="75.00" y="39.00" width="3.00" height="3.00"/>
      <svg:rect x="81.00" y="39.00" width="6.00" height="3.00"/>
      <svg:rect x="15.00" y="42.00" width="3.00" height="3.00"/>
      <svg:rect x="21.00" y="42.00" width="3.00" height="3.00"/>
      <svg:rect x="30.00" y="42.00" width="3.00" height="3.00"/>
      <svg:rect x="36.00" y="42.00" width="9.00" height="3.00"/>
      <svg:rect x="48.00" y="42.00" width="3.00" height="3.00"/>
      <svg:rect x="57.00" y="42.00" width="3.00" height="3.00"/>
      <svg:rect x="72.00" y="42.00" width="9.00" height="3.00"/>
      <svg:rect x="84.00" y="42.00" width="3.00" height="3.00"/>
      <svg:rect x="18.00" y="45.00" width="6.00" height="3.00"/>
      <svg:rect x="33.00" y="45.00" width="6.00" height="3.00"/>
      <svg:rect x="42.00" y="45.00" width="9.00" height="3.00"/>
      <svg:rect x="57.00" y="45.00" width="3.00" height="3.00"/>
      <svg:rect x="69.00" y="45.00" width="3.00" height="3.00"/>
      <svg:rect x="75.00" y="45.00" width="3.00" height="3.00"/>
      <svg:rect x="15.00" y="48.00" width="3.00" height="3.00"/>
      <svg:rect x="24.00" y="48.00" width="9.00" height="3.00"/>
      <svg:rect x="39.00" y="48.00" width="6.00" height="3.00"/>
      <svg:rect x="48.00" y="48.00" width="3.00" height="3.00"/>
      <svg:rect x="57.00" y="48.00" width="6.00" height="3.00"/>
      <svg:rect x="66.00" y="48.00" width="6.00" height="3.00"/>
      <svg:rect x="84.00" y="48.00" width="3.00" height="3.00"/>
      <svg:rect x="21.00" y="51.00" width="9.00" height="3.00"/>
      <svg:rect x="39.00" y="51.00" width="6.00" height="3.00"/>
      <svg:rect x="57.00" y="51.00" width="6.00" height="3.00"/>
      <svg:rect x="66.00" y="51.00" width="6.00" height="3.00"/>
      <svg:rect x="81.00" y="51.00" width="6.00" height="3.00"/>
      <svg:rect x="12.00" y="54.00" width="12.00" height="3.00"/>
      <svg:rect x="30.00" y="54.00" width="3.00" height="3.00"/>
      <svg:rect x="39.00" y="54.00" width="27.00" height="3.00"/>
      <svg:rect x="69.00" y="54.00" width="12.00" height="3.00"/>
      <svg:rect x="84.00" y="54.00" width="3.00" height="3.00"/>
      <svg:rect x="18.00" y="57.00" width="3.00" height="3.00"/>
      <svg:rect x="24.00" y="57.00" width="3.00" height="3.00"/>
      <svg:rect x="33.00" y="57.00" width="3.00" height="3.00"/>
      <svg:rect x="39.00" y="57.00" width="3.00" height="3.00"/>
      <svg:rect x="45.00" y="57.00" width="3.00" height="3.00"/>
      <svg:rect x="54.00" y="57.00" width="12.00" height="3.00"/>
      <svg:rect x="69.00" y="57.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="60.00" width="6.00" height="3.00"/>
      <svg:rect x="21.00" y="60.00" width="3.00" height="3.00"/>
      <svg:rect x="30.00" y="60.00" width="3.00" height="3.00"/>
      <svg:rect x="39.00" y="60.00" width="9.00" height="3.00"/>
      <svg:rect x="60.00" y="60.00" width="15.00" height="3.00"/>
      <svg:rect x="81.00" y="60.00" width="3.00" height="3.00"/>
      <svg:rect x="36.00" y="63.00" width="15.00" height="3.00"/>
      <svg:rect x="60.00" y="63.00" width="3.00" height="3.00"/>
      <svg:rect x="72.00" y="63.00" width="3.00" height="3.00"/>
      <svg:rect x="78.00" y="63.00" width="3.00" height="3.00"/>
      <svg:rect x="84.00" y="63.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="66.00" width="21.00" height="3.00"/>
      <svg:rect x="45.00" y="66.00" width="3.00" height="3.00"/>
      <svg:rect x="54.00" y="66.00" width="3.00" height="3.00"/>
      <svg:rect x="60.00" y="66.00" width="3.00" height="3.00"/>
      <svg:rect x="66.00" y="66.00" width="3.00" height="3.00"/>
      <svg:rect x="72.00" y="66.00" width="6.00" height="3.00"/>
      <svg:rect x="84.00" y="66.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="69.00" width="3.00" height="3.00"/>
      <svg:rect x="30.00" y="69.00" width="3.00" height="3.00"/>
      <svg:rect x="36.00" y="69.00" width="6.00" height="3.00"/>
      <svg:rect x="54.00" y="69.00" width="3.00" height="3.00"/>
      <svg:rect x="60.00" y="69.00" width="3.00" height="3.00"/>
      <svg:rect x="72.00" y="69.00" width="3.00" height="3.00"/>
      <svg:rect x="84.00" y="69.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="72.00" width="3.00" height="3.00"/>
      <svg:rect x="18.00" y="72.00" width="9.00" height="3.00"/>
      <svg:rect x="30.00" y="72.00" width="3.00" height="3.00"/>
      <svg:rect x="45.00" y="72.00" width="3.00" height="3.00"/>
      <svg:rect x="54.00" y="72.00" width="24.00" height="3.00"/>
      <svg:rect x="81.00" y="72.00" width="3.00" height="3.00"/>
      <svg:rect x="12.00" y="75.00" width="3.00" height="3.00"/>
      <svg:rect x="18.00" y="75.00" width="9.00" height="3.00"/>
      <svg:rect x="30.00" y="75.00" width="3.00" height="3.00"/>
      <svg:rect x="42.00" y="75.00" width="9.00" height="3.00"/>
      <svg:rect x="54.00" y="75.00" width="3.00" height="3.00"/>
      <svg:rect x="60.00" y="75.00" width="6.00" height="3.00"/>
      <svg:rect x="72.00" y="75.00" width="12.00" height="3.00"/>
      <svg:rect x="12.00" y="78.00" width="3.00" height="3.00"/>
      <svg:rect x="18.00" y="78.00" width="9.00" height="3.00"/>
      <svg:rect x="30.00" y="78.00" width="3.00" height="3.00"/>
      <svg:rect x="36.00" y="78.00" width="12.00" height="3.00"/>
      <svg:rect x="51.00" y="78.00" width="3.00" height="3.00"/>
      <svg:rect x="57.00" y="78.00" width="6.00" height="3.00"/>
      <svg:rect x="72.00" y="78.00" width="3.00" height="3.00"/>
      <svg:rect x="81.00" y="78.00" width="6.00" height="3.00"/>
      <svg:rect x="12.00" y="81.00" width="3.00" height="3.00"/>
      <svg:rect x="30.00" y="81.00" width="3.00" height="3.00"/>
      <svg:rect x="36.00" y="81.00" width="15.00" height="3.00"/>
      <svg:rect x="54.00" y="81.00" width="12.00" height="3.00"/>
      <svg:rect x="69.00" y="81.00" width="6.00" height="3.00"/>
      <svg:rect x="12.00" y="84.00" width="21.00" height="3.00"/>
      <svg:rect x="36.00" y="84.00" width="9.00" height="3.00"/>
      <svg:rect x="51.00" y="84.00" width="3.00" height="3.00"/>
      <svg:rect x="60.00" y="84.00" width="6.00" height="3.00"/>
      <svg:rect x="75.00" y="84.00" width="3.00" height="3.00"/>
      <svg:rect x="84.00" y="84.00" width="3.00" height="3.00"/>
   </svg:g>
</svg>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...