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

temporary FIX: drawToPMCanvas -> dpi ignored #7

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

radjkarl
Copy link

@radjkarl radjkarl commented Apr 9, 2018

Hi there,

when creating a raster image from an SVG with dpi values different then 72, the image range is scaled, but not the image itself.

Version used: 0.8.1

Minimum working example:

`
import numpy as np
from lxml import etree
from svglib.svglib import SvgRenderer
from reportlab.graphics import renderPM
import pylab as plt

s = ''' <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"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"

width="100mm"
height="100mm" >


aaaaa
bbb
'''.encode('UTF-8')

parser = etree.XMLParser(remove_comments=True, recover=True)
xml = etree.fromstring(s, parser=parser)

for dpi in (72, 150, 300):
drw = SvgRenderer('_tempfile.svg').render(xml)
pil = renderPM.drawToPIL(drw, dpi=dpi)
plt.figure(dpi)
plt.imshow(np.array(pil))
plt.show()
`

This generated the following output:
image

Output after fix:
image

I am sure that there is a better way ... such as incorporating d.renderScale (in renderScaledDrawing) right

Hi there,

when creating a raster image from an SVG with dpi values different then 72, the image range is scaled,  but not the image itself.

Version used: 0.8.1

Minimum working example:

`
import numpy as np
from lxml import etree
from svglib.svglib import SvgRenderer
from reportlab.graphics import renderPM
import pylab as plt

s = ''' <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"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"

width="100mm"
height="100mm" >

<image 
    x="0mm" y="27mm" 
    width="45mm" height="45mm" 
    xlink:href="data:image/jpeg;base64,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"/>
<text 
    x="22.5mm" y="50mm" 
    font-family="sans-serif" 
    font-size="4.666666666666667mm" fill="black">aaaaa</text>
<text 
    x="77.5mm" y="50mm" 
    font-family="sans-serif" 
    font-size="4.666666666666667mm" fill="black">bbb</text>
</svg>'''.encode('UTF-8')

parser = etree.XMLParser(remove_comments=True, recover=True)
xml = etree.fromstring(s, parser=parser)

for dpi in  (72, 150, 300):
    drw = SvgRenderer('_tempfile.svg').render(xml)
    pil = renderPM.drawToPIL(drw, dpi=dpi)
    plt.figure(dpi)
    plt.imshow(np.array(pil))
plt.show()
`

This generated the following output:
![image](https://user-images.githubusercontent.com/350050/38487612-650b040c-3c13-11e8-9e2a-ad8f3b0cad4b.png)

Output after fix:
![image](https://user-images.githubusercontent.com/350050/38487858-3208db50-3c14-11e8-8b48-0e323648925d.png)

I am sure that there is a better way ... such as incorporating d.renderScale (in renderScaledDrawing) right
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.

1 participant