Merge pull request #578 from wiredfool/xrange

Python3 issues in JpegImagePlugin
This commit is contained in:
wiredfool 2014-03-27 20:52:07 -07:00
commit 3e24bc684d
2 changed files with 17 additions and 13 deletions

View File

@ -442,7 +442,7 @@ samplings = {
} }
def convert_dict_qtables(qtables): def convert_dict_qtables(qtables):
qtables = [qtables[key] for key in xrange(len(qtables)) if qtables.has_key(key)] qtables = [qtables[key] for key in range(len(qtables)) if key in qtables]
for idx, table in enumerate(qtables): for idx, table in enumerate(qtables):
qtables[idx] = [table[i] for i in zigzag_index] qtables[idx] = [table[i] for i in zigzag_index]
return qtables return qtables
@ -504,7 +504,7 @@ def _save(im, fp, filename):
except ValueError: except ValueError:
raise ValueError("Invalid quantization table") raise ValueError("Invalid quantization table")
else: else:
qtables = [lines[s:s+64] for s in xrange(0, len(lines), 64)] qtables = [lines[s:s+64] for s in range(0, len(lines), 64)]
if isinstance(qtables, (tuple, list, dict)): if isinstance(qtables, (tuple, list, dict)):
if isinstance(qtables, dict): if isinstance(qtables, dict):
qtables = convert_dict_qtables(qtables) qtables = convert_dict_qtables(qtables)

View File

@ -10,9 +10,7 @@ codecs = dir(Image.core)
if "jpeg_encoder" not in codecs or "jpeg_decoder" not in codecs: if "jpeg_encoder" not in codecs or "jpeg_decoder" not in codecs:
skip("jpeg support not available") skip("jpeg support not available")
# sample jpeg stream test_file = "Images/lena.jpg"
file = "Images/lena.jpg"
data = open(file, "rb").read()
def roundtrip(im, **options): def roundtrip(im, **options):
out = BytesIO() out = BytesIO()
@ -30,7 +28,7 @@ def test_sanity():
# internal version number # internal version number
assert_match(Image.core.jpeglib_version, "\d+\.\d+$") assert_match(Image.core.jpeglib_version, "\d+\.\d+$")
im = Image.open(file) im = Image.open(test_file)
im.load() im.load()
assert_equal(im.mode, "RGB") assert_equal(im.mode, "RGB")
assert_equal(im.size, (128, 128)) assert_equal(im.size, (128, 128))
@ -40,7 +38,7 @@ def test_sanity():
def test_app(): def test_app():
# Test APP/COM reader (@PIL135) # Test APP/COM reader (@PIL135)
im = Image.open(file) im = Image.open(test_file)
assert_equal(im.applist[0], assert_equal(im.applist[0],
("APP0", b"JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00")) ("APP0", b"JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00"))
assert_equal(im.applist[1], ("COM", b"Python Imaging Library")) assert_equal(im.applist[1], ("COM", b"Python Imaging Library"))
@ -49,8 +47,8 @@ def test_app():
def test_cmyk(): def test_cmyk():
# Test CMYK handling. Thanks to Tim and Charlie for test data, # Test CMYK handling. Thanks to Tim and Charlie for test data,
# Michael for getting me to look one more time. # Michael for getting me to look one more time.
file = "Tests/images/pil_sample_cmyk.jpg" f = "Tests/images/pil_sample_cmyk.jpg"
im = Image.open(file) im = Image.open(f)
# the source image has red pixels in the upper left corner. # the source image has red pixels in the upper left corner.
c, m, y, k = [x / 255.0 for x in im.getpixel((0, 0))] c, m, y, k = [x / 255.0 for x in im.getpixel((0, 0))]
assert_true(c == 0.0 and m > 0.8 and y > 0.8 and k == 0.0) assert_true(c == 0.0 and m > 0.8 and y > 0.8 and k == 0.0)
@ -66,7 +64,7 @@ def test_cmyk():
def test_dpi(): def test_dpi():
def test(xdpi, ydpi=None): def test(xdpi, ydpi=None):
im = Image.open(file) im = Image.open(test_file)
im = roundtrip(im, dpi=(xdpi, ydpi or xdpi)) im = roundtrip(im, dpi=(xdpi, ydpi or xdpi))
return im.info.get("dpi") return im.info.get("dpi")
assert_equal(test(72), (72, 72)) assert_equal(test(72), (72, 72))
@ -80,9 +78,9 @@ def test_icc():
icc_profile = im1.info["icc_profile"] icc_profile = im1.info["icc_profile"]
assert_equal(len(icc_profile), 3144) assert_equal(len(icc_profile), 3144)
# Roundtrip via physical file. # Roundtrip via physical file.
file = tempfile("temp.jpg") f = tempfile("temp.jpg")
im1.save(file, icc_profile=icc_profile) im1.save(f, icc_profile=icc_profile)
im2 = Image.open(file) im2 = Image.open(f)
assert_equal(im2.info.get("icc_profile"), icc_profile) assert_equal(im2.info.get("icc_profile"), icc_profile)
# Roundtrip via memory buffer. # Roundtrip via memory buffer.
im1 = roundtrip(lena()) im1 = roundtrip(lena())
@ -203,3 +201,9 @@ def test_exif():
im = Image.open("Tests/images/pil_sample_rgb.jpg") im = Image.open("Tests/images/pil_sample_rgb.jpg")
info = im._getexif() info = im._getexif()
assert_equal(info[305], 'Adobe Photoshop CS Macintosh') assert_equal(info[305], 'Adobe Photoshop CS Macintosh')
def test_quality_keep():
im = Image.open("Images/lena.jpg")
f = tempfile('temp.jpg')
assert_no_exception(lambda: im.save(f, quality='keep'))