Merge pull request #1591 from radarhere/health

Health fixes
This commit is contained in:
wiredfool 2015-12-14 21:00:09 +00:00
commit 436daee5e0
19 changed files with 48 additions and 49 deletions

View File

@ -134,9 +134,13 @@ class BmpImageFile(ImageFile.ImageFile):
24: [(0xff0000, 0xff00, 0xff)], 24: [(0xff0000, 0xff00, 0xff)],
16: [(0xf800, 0x7e0, 0x1f), (0x7c00, 0x3e0, 0x1f)]} 16: [(0xf800, 0x7e0, 0x1f), (0x7c00, 0x3e0, 0x1f)]}
MASK_MODES = { MASK_MODES = {
(32, (0xff0000, 0xff00, 0xff, 0x0)): "BGRX", (32, (0xff0000, 0xff00, 0xff, 0xff000000)): "BGRA", (32, (0x0, 0x0, 0x0, 0x0)): "BGRA", (32, (0xff0000, 0xff00, 0xff, 0x0)): "BGRX",
(24, (0xff0000, 0xff00, 0xff)): "BGR", (32, (0xff0000, 0xff00, 0xff, 0xff000000)): "BGRA",
(16, (0xf800, 0x7e0, 0x1f)): "BGR;16", (16, (0x7c00, 0x3e0, 0x1f)): "BGR;15"} (32, (0x0, 0x0, 0x0, 0x0)): "BGRA",
(24, (0xff0000, 0xff00, 0xff)): "BGR",
(16, (0xf800, 0x7e0, 0x1f)): "BGR;16",
(16, (0x7c00, 0x3e0, 0x1f)): "BGR;15"
}
if file_info['bits'] in SUPPORTED: if file_info['bits'] in SUPPORTED:
if file_info['bits'] == 32 and file_info['rgba_mask'] in SUPPORTED[file_info['bits']]: if file_info['bits'] == 32 and file_info['rgba_mask'] in SUPPORTED[file_info['bits']]:
raw_mode = MASK_MODES[(file_info['bits'], file_info['rgba_mask'])] raw_mode = MASK_MODES[(file_info['bits'], file_info['rgba_mask'])]

View File

@ -295,7 +295,7 @@ class EpsImageFile(ImageFile.ImageFile):
break break
try: try:
self.mode = self.mode_map[int(mo)] self.mode = self.mode_map[int(mo)]
except: except ValueError:
break break
self.size = int(x), int(y) self.size = int(x), int(y)

View File

@ -397,10 +397,8 @@ def _save(im, fp, filename, save_all=False):
fp.write(b";") # end of file fp.write(b";") # end of file
try: if hasattr(fp, "flush"):
fp.flush() fp.flush()
except:
pass
def get_interlace(im): def get_interlace(im):

View File

@ -650,9 +650,9 @@ class Image(object):
def tobytes(self, encoder_name="raw", *args): def tobytes(self, encoder_name="raw", *args):
""" """
Return image as a bytes object. Return image as a bytes object.
.. warning:: .. warning::
This method returns the raw image data from the internal This method returns the raw image data from the internal
storage. For compressed image data (e.g. PNG, JPEG) use storage. For compressed image data (e.g. PNG, JPEG) use
:meth:`~.save`, with a BytesIO parameter for in-memory :meth:`~.save`, with a BytesIO parameter for in-memory
@ -2278,7 +2278,7 @@ def open(fp, mode="r"):
except (SyntaxError, IndexError, TypeError, struct.error): except (SyntaxError, IndexError, TypeError, struct.error):
# Leave disabled by default, spams the logs with image # Leave disabled by default, spams the logs with image
# opening failures that are entirely expected. # opening failures that are entirely expected.
#logger.debug("", exc_info=True) # logger.debug("", exc_info=True)
continue continue
return None return None

View File

@ -42,6 +42,7 @@ from PIL._util import isStringType
# Application code should use the <b>Draw</b> factory, instead of # Application code should use the <b>Draw</b> factory, instead of
# directly. # directly.
class ImageDraw(object): class ImageDraw(object):
## ##
@ -297,7 +298,6 @@ class ImageDraw(object):
def multiline_textsize(self, text, font=None, spacing=0): def multiline_textsize(self, text, font=None, spacing=0):
max_width = 0 max_width = 0
height = 0
lines = self._multiline_split(text) lines = self._multiline_split(text)
line_spacing = self.textsize('A', font=font)[1] + spacing line_spacing = self.textsize('A', font=font)[1] + spacing
for line in lines: for line in lines:

View File

@ -85,6 +85,7 @@ def fromqpixmap(im):
# bytes_io.seek(0) # bytes_io.seek(0)
# return Image.open(bytes_io) # return Image.open(bytes_io)
def align8to32(bytes, width, mode): def align8to32(bytes, width, mode):
""" """
converts each scanline of data from 8 bit to 32 bit aligned converts each scanline of data from 8 bit to 32 bit aligned
@ -113,6 +114,7 @@ def align8to32(bytes, width, mode):
return b''.join(new_data) return b''.join(new_data)
def _toqclass_helper(im): def _toqclass_helper(im):
data = None data = None
colortable = None colortable = None

View File

@ -719,7 +719,6 @@ def jpeg_factory(fp=None, filename=None):
except SyntaxError: except SyntaxError:
warnings.warn("Image appears to be a malformed MPO file, it will be " warnings.warn("Image appears to be a malformed MPO file, it will be "
"interpreted as a base JPEG file") "interpreted as a base JPEG file")
pass
return im return im

View File

@ -56,7 +56,7 @@ class PyAccess(object):
# Debugging is polluting test traces, only useful here # Debugging is polluting test traces, only useful here
# when hacking on PyAccess # when hacking on PyAccess
#logger.debug("%s", vals) # logger.debug("%s", vals)
self._post_init() self._post_init()
def _post_init(self): def _post_init(self):

View File

@ -64,7 +64,7 @@ for o, a in opt:
printerArgs = ["lpr"] printerArgs = ["lpr"]
elif o == "-P": elif o == "-P":
# printer channel # printer channel
printerArgs = ["lpr","-P%s" % a] printerArgs = ["lpr", "-P%s" % a]
for filepath in argv: for filepath in argv:
try: try:

View File

@ -13,7 +13,7 @@ from helper import unittest, PillowTestCase
from PIL import Image from PIL import Image
try: try:
import numpy as np import numpy as np
except: except ImportError:
raise unittest.SkipTest("numpy not installed") raise unittest.SkipTest("numpy not installed")
YDIM = 32769 YDIM = 32769

View File

@ -82,7 +82,7 @@ class TestImageSpider(PillowTestCase):
def test_invalid_file(self): def test_invalid_file(self):
invalid_file = "Tests/images/invalid.spider" invalid_file = "Tests/images/invalid.spider"
self.assertRaises(IOError, lambda: Image.open(invalid_file)) self.assertRaises(IOError, lambda: Image.open(invalid_file))

View File

@ -80,11 +80,11 @@ class TestFileTiff(PillowTestCase):
filename = "Tests/images/pil168.tif" filename = "Tests/images/pil168.tif"
im = Image.open(filename) im = Image.open(filename)
#legacy api # legacy api
self.assert_(isinstance(im.tag[X_RESOLUTION][0], tuple)) self.assert_(isinstance(im.tag[X_RESOLUTION][0], tuple))
self.assert_(isinstance(im.tag[Y_RESOLUTION][0], tuple)) self.assert_(isinstance(im.tag[Y_RESOLUTION][0], tuple))
#v2 api # v2 api
self.assert_(isinstance(im.tag_v2[X_RESOLUTION], float)) self.assert_(isinstance(im.tag_v2[X_RESOLUTION], float))
self.assert_(isinstance(im.tag_v2[Y_RESOLUTION], float)) self.assert_(isinstance(im.tag_v2[Y_RESOLUTION], float))
@ -249,7 +249,7 @@ class TestFileTiff(PillowTestCase):
{256: 55, 257: 43, 258: (8, 8, 8, 8), 259: 1, {256: 55, 257: 43, 258: (8, 8, 8, 8), 259: 1,
262: 2, 296: 2, 273: (8,), 338: (1,), 277: 4, 262: 2, 296: 2, 273: (8,), 338: (1,), 277: 4,
279: (9460,), 282: 72.0, 283: 72.0, 284: 1}) 279: (9460,), 282: 72.0, 283: 72.0, 284: 1})
# legacy interface # legacy interface
self.assertEqual( self.assertEqual(
im.tag.as_dict(), im.tag.as_dict(),

View File

@ -28,7 +28,7 @@ class TestFileTiffMetadata(PillowTestCase):
# #
# For text items, we still have to decode('ascii','replace') because # For text items, we still have to decode('ascii','replace') because
# the tiff file format can't take 8 bit bytes in that field. # the tiff file format can't take 8 bit bytes in that field.
basetextdata = "This is some arbitrary metadata for a text field" basetextdata = "This is some arbitrary metadata for a text field"
bindata = basetextdata.encode('ascii') + b" \xff" bindata = basetextdata.encode('ascii') + b" \xff"
textdata = basetextdata + " " + chr(255) textdata = basetextdata + " " + chr(255)
@ -40,7 +40,7 @@ class TestFileTiffMetadata(PillowTestCase):
ImageJMetaData = tag_ids['ImageJMetaData'] ImageJMetaData = tag_ids['ImageJMetaData']
ImageJMetaDataByteCounts = tag_ids['ImageJMetaDataByteCounts'] ImageJMetaDataByteCounts = tag_ids['ImageJMetaDataByteCounts']
ImageDescription = tag_ids['ImageDescription'] ImageDescription = tag_ids['ImageDescription']
info[ImageJMetaDataByteCounts] = len(bindata) info[ImageJMetaDataByteCounts] = len(bindata)
info[ImageJMetaData] = bindata info[ImageJMetaData] = bindata
info[tag_ids['RollAngle']] = floatdata info[tag_ids['RollAngle']] = floatdata
@ -49,7 +49,7 @@ class TestFileTiffMetadata(PillowTestCase):
info.tagtype[tag_ids['YawAngle']] = 12 info.tagtype[tag_ids['YawAngle']] = 12
info[ImageDescription] = textdata info[ImageDescription] = textdata
f = self.tempfile("temp.tif") f = self.tempfile("temp.tif")
img.save(f, tiffinfo=info) img.save(f, tiffinfo=info)
@ -70,7 +70,6 @@ class TestFileTiffMetadata(PillowTestCase):
loaded_double = loaded.tag[tag_ids['YawAngle']][0] loaded_double = loaded.tag[tag_ids['YawAngle']][0]
self.assertAlmostEqual(loaded_double, doubledata) self.assertAlmostEqual(loaded_double, doubledata)
def test_read_metadata(self): def test_read_metadata(self):
img = Image.open('Tests/images/hopper_g4.tif') img = Image.open('Tests/images/hopper_g4.tif')
@ -167,7 +166,6 @@ class TestFileTiffMetadata(PillowTestCase):
self.assert_(im.info['icc_profile']) self.assert_(im.info['icc_profile'])
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -11,7 +11,7 @@ class TestFromQImage(PillowQtTestCase, PillowTestCase):
Image.open('Tests/images/transparent.png'), Image.open('Tests/images/transparent.png'),
Image.open('Tests/images/7x13.png'), Image.open('Tests/images/7x13.png'),
] ]
def roundtrip(self, expected): def roundtrip(self, expected):
# PIL -> Qt # PIL -> Qt
intermediate = expected.toqimage() intermediate = expected.toqimage()

View File

@ -24,13 +24,13 @@ class TestImageOpsUsm(PillowTestCase):
def test_filter_api(self): def test_filter_api(self):
filter = ImageFilter.GaussianBlur(2.0) test_filter = ImageFilter.GaussianBlur(2.0)
i = im.filter(filter) i = im.filter(test_filter)
self.assertEqual(i.mode, "RGB") self.assertEqual(i.mode, "RGB")
self.assertEqual(i.size, (128, 128)) self.assertEqual(i.size, (128, 128))
filter = ImageFilter.UnsharpMask(2.0, 125, 8) test_filter = ImageFilter.UnsharpMask(2.0, 125, 8)
i = im.filter(filter) i = im.filter(test_filter)
self.assertEqual(i.mode, "RGB") self.assertEqual(i.mode, "RGB")
self.assertEqual(i.size, (128, 128)) self.assertEqual(i.size, (128, 128))

View File

@ -9,7 +9,7 @@ from io import BytesIO
if sys.platform.startswith('win32'): if sys.platform.startswith('win32'):
import ctypes.wintypes import ctypes.wintypes
class BITMAPFILEHEADER(ctypes.Structure): class BITMAPFILEHEADER(ctypes.Structure):
_pack_ = 2 _pack_ = 2
_fields_ = [ _fields_ = [
@ -40,27 +40,26 @@ if sys.platform.startswith('win32'):
DIB_RGB_COLORS = 0 DIB_RGB_COLORS = 0
memcpy = ctypes.cdll.msvcrt.memcpy memcpy = ctypes.cdll.msvcrt.memcpy
memcpy.argtypes = [ ctypes.c_void_p, ctypes.c_void_p, ctypes.c_size_t ] memcpy.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_size_t]
CreateCompatibleDC = ctypes.windll.gdi32.CreateCompatibleDC CreateCompatibleDC = ctypes.windll.gdi32.CreateCompatibleDC
CreateCompatibleDC.argtypes = [ ctypes.wintypes.HDC ] CreateCompatibleDC.argtypes = [ctypes.wintypes.HDC]
CreateCompatibleDC.restype = ctypes.wintypes.HDC CreateCompatibleDC.restype = ctypes.wintypes.HDC
DeleteDC = ctypes.windll.gdi32.DeleteDC DeleteDC = ctypes.windll.gdi32.DeleteDC
DeleteDC.argtypes = [ ctypes.wintypes.HDC ] DeleteDC.argtypes = [ctypes.wintypes.HDC]
SelectObject = ctypes.windll.gdi32.SelectObject SelectObject = ctypes.windll.gdi32.SelectObject
SelectObject.argtypes = [ ctypes.wintypes.HDC, ctypes.wintypes.HGDIOBJ ] SelectObject.argtypes = [ctypes.wintypes.HDC, ctypes.wintypes.HGDIOBJ]
SelectObject.restype = ctypes.wintypes.HGDIOBJ SelectObject.restype = ctypes.wintypes.HGDIOBJ
DeleteObject = ctypes.windll.gdi32.DeleteObject DeleteObject = ctypes.windll.gdi32.DeleteObject
DeleteObject.argtypes = [ ctypes.wintypes.HGDIOBJ ] DeleteObject.argtypes = [ctypes.wintypes.HGDIOBJ]
CreateDIBSection = ctypes.windll.gdi32.CreateDIBSection CreateDIBSection = ctypes.windll.gdi32.CreateDIBSection
CreateDIBSection.argtypes = [ ctypes.wintypes.HDC, ctypes.c_void_p, ctypes.c_uint, ctypes.POINTER(ctypes.c_void_p), ctypes.wintypes.HANDLE, ctypes.wintypes.DWORD ] CreateDIBSection.argtypes = [ctypes.wintypes.HDC, ctypes.c_void_p, ctypes.c_uint, ctypes.POINTER(ctypes.c_void_p), ctypes.wintypes.HANDLE, ctypes.wintypes.DWORD]
CreateDIBSection.restype = ctypes.wintypes.HBITMAP CreateDIBSection.restype = ctypes.wintypes.HBITMAP
def serialize_dib(bi, pixels): def serialize_dib(bi, pixels):
bf = BITMAPFILEHEADER() bf = BITMAPFILEHEADER()
bf.bfType = 0x4d42 bf.bfType = 0x4d42
@ -78,7 +77,7 @@ if sys.platform.startswith('win32'):
class TestImageWinPointers(PillowTestCase): class TestImageWinPointers(PillowTestCase):
def test_pointer(self): def test_pointer(self):
im = hopper() im = hopper()
(width, height) =im.size (width, height) = im.size
opath = self.tempfile('temp.png') opath = self.tempfile('temp.png')
imdib = ImageWin.Dib(im) imdib = ImageWin.Dib(im)
@ -94,7 +93,7 @@ if sys.platform.startswith('win32'):
hdr.biClrImportant = 0 hdr.biClrImportant = 0
hdc = CreateCompatibleDC(None) hdc = CreateCompatibleDC(None)
#print('hdc:',hex(hdc)) # print('hdc:',hex(hdc))
pixels = ctypes.c_void_p() pixels = ctypes.c_void_p()
dib = CreateDIBSection(hdc, ctypes.byref(hdr), DIB_RGB_COLORS, ctypes.byref(pixels), None, 0) dib = CreateDIBSection(hdc, ctypes.byref(hdr), DIB_RGB_COLORS, ctypes.byref(pixels), None, 0)
SelectObject(hdc, dib) SelectObject(hdc, dib)
@ -108,4 +107,3 @@ if sys.platform.startswith('win32'):
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -22,9 +22,9 @@ class TestNumpy(PillowTestCase):
def test_numpy_to_image(self): def test_numpy_to_image(self):
def to_image(dtype, bands=1, bool=0): def to_image(dtype, bands=1, boolean=0):
if bands == 1: if bands == 1:
if bool: if boolean:
data = [0, 1] * 50 data = [0, 1] * 50
else: else:
data = list(range(100)) data = list(range(100))
@ -43,8 +43,8 @@ class TestNumpy(PillowTestCase):
# print dtype, list(i.getdata()) # print dtype, list(i.getdata())
return i return i
# self.assert_image(to_image(numpy.bool, bool=1), "1", (10, 10)) # self.assert_image(to_image(numpy.bool, boolean=1), "1", (10, 10))
# self.assert_image(to_image(numpy.bool8, bool=1), "1", (10, 10)) # self.assert_image(to_image(numpy.bool8, boolean=1), "1", (10, 10))
self.assertRaises(TypeError, lambda: to_image(numpy.uint)) self.assertRaises(TypeError, lambda: to_image(numpy.uint))
self.assert_image(to_image(numpy.uint8), "L", (10, 10)) self.assert_image(to_image(numpy.uint8), "L", (10, 10))

View File

@ -52,10 +52,10 @@ class TestOleFileIo(PillowTestCase):
ole = OleFileIO.OleFileIO(ole_file) ole = OleFileIO.OleFileIO(ole_file)
# Act # Act
type = ole.get_type('worddocument') entry_type = ole.get_type('worddocument')
# Assert # Assert
self.assertEqual(type, OleFileIO.STGTY_STREAM) self.assertEqual(entry_type, OleFileIO.STGTY_STREAM)
ole.close() ole.close()
def test_get_size(self): def test_get_size(self):

View File

@ -22,8 +22,8 @@ class TestPickle(PillowTestCase):
self.assertEqual(im, loaded_im) self.assertEqual(im, loaded_im)
def helper_pickle_string(self, pickle, protocol=0, def helper_pickle_string(self, pickle, protocol=0,
file='Tests/images/hopper.jpg', mode=None): test_file='Tests/images/hopper.jpg', mode=None):
im = Image.open(file) im = Image.open(test_file)
if mode: if mode:
im = im.convert(mode) im = im.convert(mode)
@ -69,7 +69,7 @@ class TestPickle(PillowTestCase):
"Tests/images/p_trns_single.png", "Tests/images/p_trns_single.png",
"Tests/images/pil123p.png" "Tests/images/pil123p.png"
]: ]:
self.helper_pickle_string(pickle, file=test_file) self.helper_pickle_string(pickle, test_file=test_file)
def test_pickle_l_mode(self): def test_pickle_l_mode(self):
# Arrange # Arrange