mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-04-25 11:33:42 +03:00
Merge pull request #64 from kmike/master
Testing improvements and better Python 3.x support
This commit is contained in:
commit
001a1521cb
12
PIL/Image.py
12
PIL/Image.py
|
@ -541,7 +541,11 @@ class Image:
|
||||||
if bytes is str:
|
if bytes is str:
|
||||||
# Declare tostring as alias to tobytes
|
# Declare tostring as alias to tobytes
|
||||||
def tostring(self, *args, **kw):
|
def tostring(self, *args, **kw):
|
||||||
warnings.warn('tostring() is deprecated. Please call tobytes() instead.', DeprecationWarning)
|
warnings.warn(
|
||||||
|
'tostring() is deprecated. Please call tobytes() instead.',
|
||||||
|
DeprecationWarning,
|
||||||
|
stacklevel=2,
|
||||||
|
)
|
||||||
return self.tobytes(*args, **kw)
|
return self.tobytes(*args, **kw)
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1813,7 +1817,11 @@ def frombytes(mode, size, data, decoder_name="raw", *args):
|
||||||
if bytes is str:
|
if bytes is str:
|
||||||
# Declare fromstring as an alias for frombytes
|
# Declare fromstring as an alias for frombytes
|
||||||
def fromstring(*args, **kw):
|
def fromstring(*args, **kw):
|
||||||
warnings.warn('fromstring() is deprecated. Please call frombytes() instead.', DeprecationWarning)
|
warnings.warn(
|
||||||
|
'fromstring() is deprecated. Please call frombytes() instead.',
|
||||||
|
DeprecationWarning,
|
||||||
|
stacklevel=2
|
||||||
|
)
|
||||||
return frombytes(*args, **kw)
|
return frombytes(*args, **kw)
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -226,7 +226,7 @@ class ImageFile(Image.Image):
|
||||||
|
|
||||||
self.fp = None # might be shared
|
self.fp = None # might be shared
|
||||||
|
|
||||||
if (t == 0 or not LOAD_TRUNCATED_IMAGES) and not self.map and e < 0:
|
if (not LOAD_TRUNCATED_IMAGES or t == 0) and not self.map and e < 0:
|
||||||
# still raised if decoder fails to return anything
|
# still raised if decoder fails to return anything
|
||||||
raise_ioerror(e)
|
raise_ioerror(e)
|
||||||
|
|
||||||
|
|
|
@ -269,6 +269,11 @@ class ImageFileDirectory(collections.MutableMapping):
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return itertools.chain(self.tags.__iter__(), self.tagdata.__iter__())
|
return itertools.chain(self.tags.__iter__(), self.tagdata.__iter__())
|
||||||
|
|
||||||
|
def items(self):
|
||||||
|
keys = list(self.__iter__())
|
||||||
|
values = [self[key] for key in keys]
|
||||||
|
return zip(keys, values)
|
||||||
|
|
||||||
# load primitives
|
# load primitives
|
||||||
|
|
||||||
load_dispatch = {}
|
load_dispatch = {}
|
||||||
|
|
|
@ -91,5 +91,6 @@ if skipped:
|
||||||
print(skipped)
|
print(skipped)
|
||||||
if failure:
|
if failure:
|
||||||
print("***", tests(failure), "of", (success + failure), "failed.")
|
print("***", tests(failure), "of", (success + failure), "failed.")
|
||||||
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
print(tests(success), "passed.")
|
print(tests(success), "passed.")
|
||||||
|
|
|
@ -12,7 +12,7 @@ assert PIL.Image.VERSION[:3] == '1.1'
|
||||||
# Create an image and do stuff with it.
|
# Create an image and do stuff with it.
|
||||||
im = PIL.Image.new("1", (100, 100))
|
im = PIL.Image.new("1", (100, 100))
|
||||||
assert (im.mode, im.size) == ('1', (100, 100))
|
assert (im.mode, im.size) == ('1', (100, 100))
|
||||||
assert len(im.tobytes() if py3 else im.tostring()) == 1300
|
assert len(im.tobytes()) == 1300
|
||||||
|
|
||||||
# Create images in all remaining major modes.
|
# Create images in all remaining major modes.
|
||||||
im = PIL.Image.new("L", (100, 100))
|
im = PIL.Image.new("L", (100, 100))
|
||||||
|
|
|
@ -177,3 +177,8 @@ def test_truncated_jpeg():
|
||||||
assert_no_exception(lambda: test(4))
|
assert_no_exception(lambda: test(4))
|
||||||
assert_no_exception(lambda: test(8))
|
assert_no_exception(lambda: test(8))
|
||||||
assert_exception(IOError, lambda: test(10))
|
assert_exception(IOError, lambda: test(10))
|
||||||
|
|
||||||
|
def test_exif():
|
||||||
|
im = Image.open("Tests/images/pil_sample_rgb.jpg")
|
||||||
|
info = im._getexif()
|
||||||
|
assert_equal(info[305], 'Adobe Photoshop CS Macintosh')
|
||||||
|
|
10
Tests/test_image_frombytes.py
Normal file
10
Tests/test_image_frombytes.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
from tester import *
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
def test_sanity():
|
||||||
|
im1 = lena()
|
||||||
|
im2 = Image.frombytes(im1.mode, im1.size, im1.tobytes())
|
||||||
|
|
||||||
|
assert_image_equal(im1, im2)
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
from tester import *
|
|
||||||
|
|
||||||
from PIL import Image
|
|
||||||
|
|
||||||
def test_sanity():
|
|
||||||
|
|
||||||
im1 = lena()
|
|
||||||
im2 = None
|
|
||||||
|
|
||||||
if py3:
|
|
||||||
im2 = Image.frombytes(im1.mode, im1.size, im1.tobytes())
|
|
||||||
else:
|
|
||||||
im2 = Image.fromstring(im1.mode, im1.size, im1.tostring())
|
|
||||||
|
|
||||||
assert_image_equal(im1, im2)
|
|
||||||
|
|
|
@ -3,5 +3,5 @@ from tester import *
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
def test_sanity():
|
def test_sanity():
|
||||||
data = lena().tobytes() if py3 else lena().tostring()
|
data = lena().tobytes()
|
||||||
assert_true(isinstance(data, bytes))
|
assert_true(isinstance(data, bytes))
|
|
@ -16,7 +16,7 @@ def test_pack():
|
||||||
if py3:
|
if py3:
|
||||||
return list(im.tobytes("raw", rawmode))
|
return list(im.tobytes("raw", rawmode))
|
||||||
else:
|
else:
|
||||||
return [ord(c) for c in im.tostring("raw", rawmode)]
|
return [ord(c) for c in im.tobytes("raw", rawmode)]
|
||||||
|
|
||||||
assert_equal(pack("1", "1"), [128])
|
assert_equal(pack("1", "1"), [128])
|
||||||
assert_equal(pack("1", "1;I"), [0])
|
assert_equal(pack("1", "1;I"), [0])
|
||||||
|
@ -53,10 +53,10 @@ def test_unpack():
|
||||||
|
|
||||||
if py3:
|
if py3:
|
||||||
data = bytes(range(1,bytes_+1))
|
data = bytes(range(1,bytes_+1))
|
||||||
im = Image.frombytes(mode, (1, 1), data, "raw", rawmode, 0, 1)
|
|
||||||
else:
|
else:
|
||||||
data = ''.join(chr(i) for i in range(1,bytes_+1))
|
data = ''.join(chr(i) for i in range(1,bytes_+1))
|
||||||
im = Image.fromstring(mode, (1, 1), data, "raw", rawmode, 0, 1)
|
|
||||||
|
im = Image.frombytes(mode, (1, 1), data, "raw", rawmode, 0, 1)
|
||||||
|
|
||||||
return im.getpixel((0, 0))
|
return im.getpixel((0, 0))
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ def test_unpack():
|
||||||
if py3:
|
if py3:
|
||||||
im = Image.frombytes(mode, (8, 1), bytes([value]), "raw", rawmode, 0, 1)
|
im = Image.frombytes(mode, (8, 1), bytes([value]), "raw", rawmode, 0, 1)
|
||||||
else:
|
else:
|
||||||
im = Image.fromstring(mode, (8, 1), chr(value), "raw", rawmode, 0, 1)
|
im = Image.frombytes(mode, (8, 1), chr(value), "raw", rawmode, 0, 1)
|
||||||
|
|
||||||
return tuple(im.getdata())
|
return tuple(im.getdata())
|
||||||
|
|
||||||
|
|
|
@ -79,18 +79,15 @@ def test_basic():
|
||||||
basic("I")
|
basic("I")
|
||||||
|
|
||||||
|
|
||||||
def test_tostring():
|
def test_tobytes():
|
||||||
|
|
||||||
def tostring(mode):
|
def tobytes(mode):
|
||||||
if py3:
|
return Image.new(mode, (1, 1), 1).tobytes()
|
||||||
return Image.new(mode, (1, 1), 1).tobytes()
|
|
||||||
else:
|
|
||||||
return Image.new(mode, (1, 1), 1).tostring()
|
|
||||||
|
|
||||||
assert_equal(tostring("L"), b"\x01")
|
assert_equal(tobytes("L"), b"\x01")
|
||||||
assert_equal(tostring("I;16"), b"\x01\x00")
|
assert_equal(tobytes("I;16"), b"\x01\x00")
|
||||||
assert_equal(tostring("I;16B"), b"\x00\x01")
|
assert_equal(tobytes("I;16B"), b"\x00\x01")
|
||||||
assert_equal(tostring("I"), b"\x01\x00\x00\x00")
|
assert_equal(tobytes("I"), b"\x01\x00\x00\x00")
|
||||||
|
|
||||||
|
|
||||||
def test_convert():
|
def test_convert():
|
||||||
|
|
|
@ -144,12 +144,9 @@ def assert_image_equal(a, b, msg=None):
|
||||||
failure(msg or "got mode %r, expected %r" % (a.mode, b.mode))
|
failure(msg or "got mode %r, expected %r" % (a.mode, b.mode))
|
||||||
elif a.size != b.size:
|
elif a.size != b.size:
|
||||||
failure(msg or "got size %r, expected %r" % (a.size, b.size))
|
failure(msg or "got size %r, expected %r" % (a.size, b.size))
|
||||||
elif py3 and a.tobytes() != b.tobytes():
|
elif a.tobytes() != b.tobytes():
|
||||||
failure(msg or "got different content")
|
failure(msg or "got different content")
|
||||||
# generate better diff?
|
# generate better diff?
|
||||||
elif not py3 and a.tostring() != b.tostring():
|
|
||||||
failure(msg or "got different content")
|
|
||||||
# same complaint?
|
|
||||||
else:
|
else:
|
||||||
success()
|
success()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user