mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-26 18:06:18 +03:00
commit
436daee5e0
|
@ -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",
|
||||||
|
(32, (0xff0000, 0xff00, 0xff, 0xff000000)): "BGRA",
|
||||||
|
(32, (0x0, 0x0, 0x0, 0x0)): "BGRA",
|
||||||
(24, (0xff0000, 0xff00, 0xff)): "BGR",
|
(24, (0xff0000, 0xff00, 0xff)): "BGR",
|
||||||
(16, (0xf800, 0x7e0, 0x1f)): "BGR;16", (16, (0x7c00, 0x3e0, 0x1f)): "BGR;15"}
|
(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'])]
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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))
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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))
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user