Skip to content

Commit

Permalink
Raise a warning if NumPy will not raise an error during conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
radarhere committed Sep 17, 2022
1 parent b8d9624 commit d02f91c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
7 changes: 5 additions & 2 deletions Tests/test_image_array.py
Expand Up @@ -35,10 +35,13 @@ def test_with_dtype(dtype):
test_with_dtype(numpy.float64)
test_with_dtype(numpy.uint8)

if parse_version(numpy.__version__) >= parse_version("1.23"):
with Image.open("Tests/images/truncated_jpeg.jpg") as im_truncated:
with Image.open("Tests/images/truncated_jpeg.jpg") as im_truncated:
if parse_version(numpy.__version__) >= parse_version("1.23"):
with pytest.raises(OSError):
numpy.array(im_truncated)
else:
with pytest.warns(UserWarning):
numpy.array(im_truncated)


def test_fromarray():
Expand Down
24 changes: 18 additions & 6 deletions src/PIL/Image.py
Expand Up @@ -679,12 +679,24 @@ def __array_interface__(self):
new["shape"] = shape
new["typestr"] = typestr
new["version"] = 3
if self.mode == "1":
# Binary images need to be extended from bits to bytes
# See: https://github.com/python-pillow/Pillow/issues/350
new["data"] = self.tobytes("raw", "L")
else:
new["data"] = self.tobytes()
try:
if self.mode == "1":
# Binary images need to be extended from bits to bytes
# See: https://github.com/python-pillow/Pillow/issues/350
new["data"] = self.tobytes("raw", "L")
else:
new["data"] = self.tobytes()
except Exception as e:
if not isinstance(e, (MemoryError, RecursionError)):
try:
import numpy
from packaging.version import parse as parse_version
except ImportError:
pass
else:
if parse_version(numpy.__version__) < parse_version("1.23"):
warnings.warn(e)
raise
return new

def __getstate__(self):
Expand Down

0 comments on commit d02f91c

Please sign in to comment.