Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not add "qrcode_modules" attribute in svg image #289

Merged
merged 1 commit into from
Nov 14, 2022

Conversation

paulo-raca
Copy link
Contributor

The generated SVG files had a big and unnecessary extra attribute: <svg qrcode_modules=....>

E.g., for this snippet:

import qrcode
from qrcode.image.svg import SvgPathImage
img = qrcode.make("Hi", image_factory=SvgPathImage)
print(img.to_string(encoding="unicode"))

It would previously result in:

<svg width="29mm" height="29mm" version="1.1" viewBox="0 0 29 29" qrcode_modules="[[True, True, True, True, True, True, True, False, False, False, True, True, False, False, True, True, True, True, True, True, True], [True, False, False, False, False, False, True, False, True, True, True, True, True, False, True, False, False, False, False, False, True], [True, False, True, True, True, False, True, False, True, True, False, False, True, False, True, False, True, True, True, False, True], [True, False, True, True, True, False, True, False, True, False, True, False, False, False, True, False, True, True, True, False, True], [True, False, True, True, True, False, True, False, False, True, True, True, True, False, True, False, True, True, True, False, True], [True, False, False, False, False, False, True, False, False, True, False, False, True, False, True, False, False, False, False, False, True], [True, True, True, True, True, True, True, False, True, False, True, False, True, False, True, True, True, True, True, True, True], [False, False, False, False, False, False, False, False, True, True, True, True, True, False, False, False, False, False, False, False, False], [True, False, False, False, False, False, True, False, True, True, True, False, True, True, True, False, False, True, True, True, False], [True, False, True, True, False, True, False, False, False, True, True, False, True, False, True, False, True, False, False, False, False], [False, True, True, False, False, True, True, True, False, False, True, True, False, True, False, False, True, True, True, True, False], [True, True, False, True, False, False, False, False, True, False, True, False, False, False, False, False, True, False, True, False, False], [True, False, True, False, False, True, True, True, True, False, False, False, False, False, True, False, False, True, True, True, False], [False, False, False, False, False, False, False, False, True, False, True, True, True, True, True, True, False, True, False, False, False], [True, True, True, True, True, True, True, False, False, False, True, False, True, False, True, True, False, False, False, True, False], [True, False, False, False, False, False, True, False, False, False, False, True, True, True, False, True, True, True, False, False, False], [True, False, True, True, True, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False], [True, False, True, True, True, False, True, False, False, False, True, False, True, False, False, False, False, False, True, False, False], [True, False, True, True, True, False, True, False, False, True, True, False, False, False, True, False, False, False, True, True, True], [True, False, False, False, False, False, True, False, False, False, True, False, False, False, False, False, True, False, True, False, False], [True, True, True, True, True, True, True, False, True, True, True, True, False, True, False, False, True, True, True, True, False]]" xmlns="http://www.w3.org/2000/svg"><path d="M4,4H5V5H4zM5,4H6V5H5zM6,4H7V5H6zM7,4H8V5H7zM8,4H9V5H8zM9,4H10V5H9zM10,4H11V5H10zM14,4H15V5H14zM15,4H16V5H15zM18,4H19V5H18zM19,4H20V5H19zM20,4H21V5H20zM21,4H22V5H21zM22,4H23V5H22zM23,4H24V5H23zM24,4H25V5H24zM4,5H5V6H4zM10,5H11V6H10zM12,5H13V6H12zM13,5H14V6H13zM14,5H15V6H14zM15,5H16V6H15zM16,5H17V6H16zM18,5H19V6H18zM24,5H25V6H24zM4,6H5V7H4zM6,6H7V7H6zM7,6H8V7H7zM8,6H9V7H8zM10,6H11V7H10zM12,6H13V7H12zM13,6H14V7H13zM16,6H17V7H16zM18,6H19V7H18zM20,6H21V7H20zM21,6H22V7H21zM22,6H23V7H22zM24,6H25V7H24zM4,7H5V8H4zM6,7H7V8H6zM7,7H8V8H7zM8,7H9V8H8zM10,7H11V8H10zM12,7H13V8H12zM14,7H15V8H14zM18,7H19V8H18zM20,7H21V8H20zM21,7H22V8H21zM22,7H23V8H22zM24,7H25V8H24zM4,8H5V9H4zM6,8H7V9H6zM7,8H8V9H7zM8,8H9V9H8zM10,8H11V9H10zM13,8H14V9H13zM14,8H15V9H14zM15,8H16V9H15zM16,8H17V9H16zM18,8H19V9H18zM20,8H21V9H20zM21,8H22V9H21zM22,8H23V9H22zM24,8H25V9H24zM4,9H5V10H4zM10,9H11V10H10zM13,9H14V10H13zM16,9H17V10H16zM18,9H19V10H18zM24,9H25V10H24zM4,10H5V11H4zM5,10H6V11H5zM6,10H7V11H6zM7,10H8V11H7zM8,10H9V11H8zM9,10H10V11H9zM10,10H11V11H10zM12,10H13V11H12zM14,10H15V11H14zM16,10H17V11H16zM18,10H19V11H18zM19,10H20V11H19zM20,10H21V11H20zM21,10H22V11H21zM22,10H23V11H22zM23,10H24V11H23zM24,10H25V11H24zM12,11H13V12H12zM13,11H14V12H13zM14,11H15V12H14zM15,11H16V12H15zM16,11H17V12H16zM4,12H5V13H4zM10,12H11V13H10zM12,12H13V13H12zM13,12H14V13H13zM14,12H15V13H14zM16,12H17V13H16zM17,12H18V13H17zM18,12H19V13H18zM21,12H22V13H21zM22,12H23V13H22zM23,12H24V13H23zM4,13H5V14H4zM6,13H7V14H6zM7,13H8V14H7zM9,13H10V14H9zM13,13H14V14H13zM14,13H15V14H14zM16,13H17V14H16zM18,13H19V14H18zM20,13H21V14H20zM5,14H6V15H5zM6,14H7V15H6zM9,14H10V15H9zM10,14H11V15H10zM11,14H12V15H11zM14,14H15V15H14zM15,14H16V15H15zM17,14H18V15H17zM20,14H21V15H20zM21,14H22V15H21zM22,14H23V15H22zM23,14H24V15H23zM4,15H5V16H4zM5,15H6V16H5zM7,15H8V16H7zM12,15H13V16H12zM14,15H15V16H14zM20,15H21V16H20zM22,15H23V16H22zM4,16H5V17H4zM6,16H7V17H6zM9,16H10V17H9zM10,16H11V17H10zM11,16H12V17H11zM12,16H13V17H12zM18,16H19V17H18zM21,16H22V17H21zM22,16H23V17H22zM23,16H24V17H23zM12,17H13V18H12zM14,17H15V18H14zM15,17H16V18H15zM16,17H17V18H16zM17,17H18V18H17zM18,17H19V18H18zM19,17H20V18H19zM21,17H22V18H21zM4,18H5V19H4zM5,18H6V19H5zM6,18H7V19H6zM7,18H8V19H7zM8,18H9V19H8zM9,18H10V19H9zM10,18H11V19H10zM14,18H15V19H14zM16,18H17V19H16zM18,18H19V19H18zM19,18H20V19H19zM23,18H24V19H23zM4,19H5V20H4zM10,19H11V20H10zM15,19H16V20H15zM16,19H17V20H16zM17,19H18V20H17zM19,19H20V20H19zM20,19H21V20H20zM21,19H22V20H21zM4,20H5V21H4zM6,20H7V21H6zM7,20H8V21H7zM8,20H9V21H8zM10,20H11V21H10zM13,20H14V21H13zM16,20H17V21H16zM19,20H20V21H19zM22,20H23V21H22zM4,21H5V22H4zM6,21H7V22H6zM7,21H8V22H7zM8,21H9V22H8zM10,21H11V22H10zM14,21H15V22H14zM16,21H17V22H16zM22,21H23V22H22zM4,22H5V23H4zM6,22H7V23H6zM7,22H8V23H7zM8,22H9V23H8zM10,22H11V23H10zM13,22H14V23H13zM14,22H15V23H14zM18,22H19V23H18zM22,22H23V23H22zM23,22H24V23H23zM24,22H25V23H24zM4,23H5V24H4zM10,23H11V24H10zM14,23H15V24H14zM20,23H21V24H20zM22,23H23V24H22zM4,24H5V25H4zM5,24H6V25H5zM6,24H7V25H6zM7,24H8V25H7zM8,24H9V25H8zM9,24H10V25H9zM10,24H11V25H10zM12,24H13V25H12zM13,24H14V25H13zM14,24H15V25H14zM15,24H16V25H15zM17,24H18V25H17zM20,24H21V25H20zM21,24H22V25H21zM22,24H23V25H22zM23,24H24V25H23z" id="qr-path" fill="#000000" fill-opacity="1" fill-rule="nonzero" stroke="none" /></svg>

After the changes, it results in:

<svg width="29mm" height="29mm" version="1.1" viewBox="0 0 29 29" xmlns="http://www.w3.org/2000/svg"><path d="M4,4H5V5H4zM5,4H6V5H5zM6,4H7V5H6zM7,4H8V5H7zM8,4H9V5H8zM9,4H10V5H9zM10,4H11V5H10zM14,4H15V5H14zM15,4H16V5H15zM18,4H19V5H18zM19,4H20V5H19zM20,4H21V5H20zM21,4H22V5H21zM22,4H23V5H22zM23,4H24V5H23zM24,4H25V5H24zM4,5H5V6H4zM10,5H11V6H10zM12,5H13V6H12zM13,5H14V6H13zM14,5H15V6H14zM15,5H16V6H15zM16,5H17V6H16zM18,5H19V6H18zM24,5H25V6H24zM4,6H5V7H4zM6,6H7V7H6zM7,6H8V7H7zM8,6H9V7H8zM10,6H11V7H10zM12,6H13V7H12zM13,6H14V7H13zM16,6H17V7H16zM18,6H19V7H18zM20,6H21V7H20zM21,6H22V7H21zM22,6H23V7H22zM24,6H25V7H24zM4,7H5V8H4zM6,7H7V8H6zM7,7H8V8H7zM8,7H9V8H8zM10,7H11V8H10zM12,7H13V8H12zM14,7H15V8H14zM18,7H19V8H18zM20,7H21V8H20zM21,7H22V8H21zM22,7H23V8H22zM24,7H25V8H24zM4,8H5V9H4zM6,8H7V9H6zM7,8H8V9H7zM8,8H9V9H8zM10,8H11V9H10zM13,8H14V9H13zM14,8H15V9H14zM15,8H16V9H15zM16,8H17V9H16zM18,8H19V9H18zM20,8H21V9H20zM21,8H22V9H21zM22,8H23V9H22zM24,8H25V9H24zM4,9H5V10H4zM10,9H11V10H10zM13,9H14V10H13zM16,9H17V10H16zM18,9H19V10H18zM24,9H25V10H24zM4,10H5V11H4zM5,10H6V11H5zM6,10H7V11H6zM7,10H8V11H7zM8,10H9V11H8zM9,10H10V11H9zM10,10H11V11H10zM12,10H13V11H12zM14,10H15V11H14zM16,10H17V11H16zM18,10H19V11H18zM19,10H20V11H19zM20,10H21V11H20zM21,10H22V11H21zM22,10H23V11H22zM23,10H24V11H23zM24,10H25V11H24zM12,11H13V12H12zM13,11H14V12H13zM14,11H15V12H14zM15,11H16V12H15zM16,11H17V12H16zM4,12H5V13H4zM10,12H11V13H10zM12,12H13V13H12zM13,12H14V13H13zM14,12H15V13H14zM16,12H17V13H16zM17,12H18V13H17zM18,12H19V13H18zM21,12H22V13H21zM22,12H23V13H22zM23,12H24V13H23zM4,13H5V14H4zM6,13H7V14H6zM7,13H8V14H7zM9,13H10V14H9zM13,13H14V14H13zM14,13H15V14H14zM16,13H17V14H16zM18,13H19V14H18zM20,13H21V14H20zM5,14H6V15H5zM6,14H7V15H6zM9,14H10V15H9zM10,14H11V15H10zM11,14H12V15H11zM14,14H15V15H14zM15,14H16V15H15zM17,14H18V15H17zM20,14H21V15H20zM21,14H22V15H21zM22,14H23V15H22zM23,14H24V15H23zM4,15H5V16H4zM5,15H6V16H5zM7,15H8V16H7zM12,15H13V16H12zM14,15H15V16H14zM20,15H21V16H20zM22,15H23V16H22zM4,16H5V17H4zM6,16H7V17H6zM9,16H10V17H9zM10,16H11V17H10zM11,16H12V17H11zM12,16H13V17H12zM18,16H19V17H18zM21,16H22V17H21zM22,16H23V17H22zM23,16H24V17H23zM12,17H13V18H12zM14,17H15V18H14zM15,17H16V18H15zM16,17H17V18H16zM17,17H18V18H17zM18,17H19V18H18zM19,17H20V18H19zM21,17H22V18H21zM4,18H5V19H4zM5,18H6V19H5zM6,18H7V19H6zM7,18H8V19H7zM8,18H9V19H8zM9,18H10V19H9zM10,18H11V19H10zM14,18H15V19H14zM16,18H17V19H16zM18,18H19V19H18zM19,18H20V19H19zM23,18H24V19H23zM4,19H5V20H4zM10,19H11V20H10zM15,19H16V20H15zM16,19H17V20H16zM17,19H18V20H17zM19,19H20V20H19zM20,19H21V20H20zM21,19H22V20H21zM4,20H5V21H4zM6,20H7V21H6zM7,20H8V21H7zM8,20H9V21H8zM10,20H11V21H10zM13,20H14V21H13zM16,20H17V21H16zM19,20H20V21H19zM22,20H23V21H22zM4,21H5V22H4zM6,21H7V22H6zM7,21H8V22H7zM8,21H9V22H8zM10,21H11V22H10zM14,21H15V22H14zM16,21H17V22H16zM22,21H23V22H22zM4,22H5V23H4zM6,22H7V23H6zM7,22H8V23H7zM8,22H9V23H8zM10,22H11V23H10zM13,22H14V23H13zM14,22H15V23H14zM18,22H19V23H18zM22,22H23V23H22zM23,22H24V23H23zM24,22H25V23H24zM4,23H5V24H4zM10,23H11V24H10zM14,23H15V24H14zM20,23H21V24H20zM22,23H23V24H22zM4,24H5V25H4zM5,24H6V25H5zM6,24H7V25H6zM7,24H8V25H7zM8,24H9V25H8zM9,24H10V25H9zM10,24H11V25H10zM12,24H13V25H12zM13,24H14V25H13zM14,24H15V25H14zM15,24H16V25H15zM17,24H18V25H17zM20,24H21V25H20zM21,24H22V25H21zM22,24H23V25H22zM23,24H24V25H23z" id="qr-path" fill="#000000" fill-opacity="1" fill-rule="nonzero" stroke="none" /></svg>

@paulo-raca
Copy link
Contributor Author

The qrcode_modules attribute also cause crashes when using lxml.etree instead of xml.etree.ElementTree.

Fix PR also fixes this problem :)

>>> img = qrcode.make('Hi', image_factory=factory)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/main.py", line 29, in make
    return qr.make_image()
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/main.py", line 365, in make_image
    im = image_factory(
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/image/svg.py", line 145, in __init__
    super().__init__(*args, **kwargs)
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/image/svg.py", line 27, in __init__
    super().__init__(*args, **kwargs)
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/image/base.py", line 139, in __init__
    super().__init__(*args, **kwargs)
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/image/base.py", line 29, in __init__
    self._img = self.new_image(**kwargs)
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/image/svg.py", line 63, in new_image
    return self._svg(**kwargs)
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/image/svg.py", line 151, in _svg
    return super()._svg(viewBox=viewBox, **kwargs)
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/image/svg.py", line 96, in _svg
    svg = super()._svg(tag=tag, **kwargs)
  File "/media/Paulo/home/.local/lib/python3.10/site-packages/qrcode/image/svg.py", line 69, in _svg
    return ET.Element(
  File "src/lxml/etree.pyx", line 3037, in lxml.etree.Element
  File "src/lxml/apihelpers.pxi", line 131, in lxml.etree._makeElement
  File "src/lxml/apihelpers.pxi", line 119, in lxml.etree._makeElement
  File "src/lxml/apihelpers.pxi", line 317, in lxml.etree._initNodeAttributes
  File "src/lxml/apihelpers.pxi", line 334, in lxml.etree._addAttributeToNode
  File "src/lxml/apihelpers.pxi", line 1538, in lxml.etree._utf8
TypeError: Argument must be bytes or unicode, got 'list'

@SmileyChris SmileyChris merged commit 49e727f into lincolnloop:master Nov 14, 2022
@paulo-raca paulo-raca deleted the qrcode_modules_attr branch November 14, 2022 05:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants