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

Fail of image path resolution in a defs/use context #420

Open
o314 opened this issue Apr 20, 2024 · 1 comment
Open

Fail of image path resolution in a defs/use context #420

o314 opened this issue Apr 20, 2024 · 1 comment

Comments

@o314
Copy link

o314 commented Apr 20, 2024

Hello there. I encounter a fail of an image path resolution in a defs/use context
Here is a MWE (env: win10 pro with docker desktop)
The svg file is ok in chrome but fails with cairosvg

fs step

  • bug.svg
  • bug_photo.jpg
  • Dockerfile

where bug.svg content is

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" xml:space="preserve"
    width="1000" height="1000" viewBox="0 0 1000 1000">

<defs>
<image id="x_photo" x="0" y="0" width="301" height="167" xlink:href="bug_photo.jpg" />
</defs>

<g transform="scale(3)">
    <use xlink:href="#x_photo" x="0" y="0" />
</g>
</svg>

Dockerfile content is

FROM python:3.10 AS py
RUN pip install \
        ipython \
        cairosvg
        
FROM py
WORKDIR /lab
COPY . "/lab"
# CMD ["ipython"]
CMD ["/bin/bash"]

docker host step

docker image build -t o314_cairosvg_python3dot10 .
docker run -it --name o314_cairosvg_python3dot10_inst1 o314_cairosvg_python3dot10
# docker start -ai o314_cairosvg_python3dot10_inst1 # if needed
# docker cp o314_cairosvg_python3dot10_inst1:/lab/bug.png bug.png # if needed

docker container step

cairosvg bug.svg -o bug.png -u

that turns into a big nasty bug

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/urllib/request.py", line 1505, in open_local_file
    stats = os.stat(localfile)
FileNotFoundError: [Errno 2] No such file or directory: '/bug_photo.jpg'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/cairosvg", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.10/site-packages/cairosvg/__main__.py", line 78, in main
    SURFACES[output_format.upper()].convert(**kwargs)
  File "/usr/local/lib/python3.10/site-packages/cairosvg/surface.py", line 133, in convert
    instance = cls(
  File "/usr/local/lib/python3.10/site-packages/cairosvg/surface.py", line 225, in __init__
    self.draw(tree)
  File "/usr/local/lib/python3.10/site-packages/cairosvg/surface.py", line 472, in draw
    self.draw(child)
  File "/usr/local/lib/python3.10/site-packages/cairosvg/surface.py", line 472, in draw
    self.draw(child)
  File "/usr/local/lib/python3.10/site-packages/cairosvg/surface.py", line 404, in draw
    TAGS[node.tag](self, node)
  File "/usr/local/lib/python3.10/site-packages/cairosvg/defs.py", line 365, in use
    surface.draw(tree)
  File "/usr/local/lib/python3.10/site-packages/cairosvg/surface.py", line 404, in draw
    TAGS[node.tag](self, node)
  File "/usr/local/lib/python3.10/site-packages/cairosvg/image.py", line 28, in image
    image_bytes = node.fetch_url(url, 'image/*')
  File "/usr/local/lib/python3.10/site-packages/cairosvg/parser.py", line 243, in fetch_url
    return read_url(url, self.url_fetcher, resource_type)
  File "/usr/local/lib/python3.10/site-packages/cairosvg/url.py", line 154, in read_url
    return url_fetcher(url, resource_type)
  File "/usr/local/lib/python3.10/site-packages/cairosvg/url.py", line 84, in fetch
    return urlopen(Request(url, headers=HTTP_HEADERS)).read()
  File "/usr/local/lib/python3.10/urllib/request.py", line 216, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/local/lib/python3.10/urllib/request.py", line 519, in open
    response = self._open(req, data)
  File "/usr/local/lib/python3.10/urllib/request.py", line 536, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/usr/local/lib/python3.10/urllib/request.py", line 496, in _call_chain
    result = func(*args)
  File "/usr/local/lib/python3.10/urllib/request.py", line 1483, in file_open
    return self.open_local_file(req)
  File "/usr/local/lib/python3.10/urllib/request.py", line 1522, in open_local_file
    raise URLError(exp)
urllib.error.URLError: <urlopen error [Errno 2] No such file or directory: '/bug_photo.jpg'>

The jpg path is not resolved correctly
I have tried to trace / fix / debug whatever without success.
Is there any simple things i have missed ? Is it really a bug ?

PS

some point of interests

@o314
Copy link
Author

o314 commented Apr 20, 2024

The files
mwe.zip

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

No branches or pull requests

1 participant