Merge pull request #4914 from radarhere/profile_path

Fixed loading profile with non-ASCII path on Windows
This commit is contained in:
Hugo van Kemenade 2020-09-13 08:53:37 +03:00 committed by GitHub
commit 0ff4cfe439
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 2 deletions

View File

@ -1,6 +1,7 @@
import datetime
import os
import re
import shutil
from io import BytesIO
import pytest
@ -436,6 +437,19 @@ def test_extended_information():
assert p.xcolor_space == "RGB "
def test_non_ascii_path(tmp_path):
skip_missing()
tempfile = str(tmp_path / ("temp_" + chr(128) + ".icc"))
try:
shutil.copy(SRGB, tempfile)
except UnicodeEncodeError:
pytest.skip("Non-ASCII path could not be created")
o = ImageCms.getOpenProfile(tempfile)
p = o.profile
assert p.model == "IEC 61966-2-1 Default RGB Colour Space - sRGB"
def test_profile_typesafety():
"""Profile init type safety

View File

@ -111,12 +111,12 @@ class TestImageFont:
with open(FONT_PATH, "rb") as f:
self._render(f)
def test_non_unicode_path(self, tmp_path):
def test_non_ascii_path(self, tmp_path):
tempfile = str(tmp_path / ("temp_" + chr(128) + ".ttf"))
try:
shutil.copy(FONT_PATH, tempfile)
except UnicodeEncodeError:
pytest.skip("Unicode path could not be created")
pytest.skip("Non-ASCII path could not be created")
ImageFont.truetype(tempfile, FONT_SIZE)

View File

@ -159,6 +159,14 @@ class ImageCmsProfile:
"""
if isinstance(profile, str):
if sys.platform == "win32":
profile_bytes_path = profile.encode()
try:
profile_bytes_path.decode("ascii")
except UnicodeDecodeError:
with open(profile, "rb") as f:
self._set(core.profile_frombytes(f.read()))
return
self._set(core.profile_open(profile), profile)
elif hasattr(profile, "read"):
self._set(core.profile_frombytes(profile.read()))