Raise a warning if NumPy will not raise an error during conversion

This commit is contained in:
Andrew Murray 2022-09-17 20:11:55 +10:00
parent b8d96246f7
commit d02f91c6da
2 changed files with 23 additions and 8 deletions

View File

@ -35,10 +35,13 @@ def test_toarray():
test_with_dtype(numpy.float64) test_with_dtype(numpy.float64)
test_with_dtype(numpy.uint8) 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): with pytest.raises(OSError):
numpy.array(im_truncated) numpy.array(im_truncated)
else:
with pytest.warns(UserWarning):
numpy.array(im_truncated)
def test_fromarray(): def test_fromarray():

View File

@ -679,12 +679,24 @@ class Image:
new["shape"] = shape new["shape"] = shape
new["typestr"] = typestr new["typestr"] = typestr
new["version"] = 3 new["version"] = 3
try:
if self.mode == "1": if self.mode == "1":
# Binary images need to be extended from bits to bytes # Binary images need to be extended from bits to bytes
# See: https://github.com/python-pillow/Pillow/issues/350 # See: https://github.com/python-pillow/Pillow/issues/350
new["data"] = self.tobytes("raw", "L") new["data"] = self.tobytes("raw", "L")
else: else:
new["data"] = self.tobytes() 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 return new
def __getstate__(self): def __getstate__(self):