mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-07-05 20:33:24 +03:00
Added DIB saving and loading through Image open
This commit is contained in:
parent
975fccafc7
commit
1bdb5dc917
|
@ -16,6 +16,7 @@ class TestFileBmp(PillowTestCase):
|
||||||
self.assertEqual(im.mode, reloaded.mode)
|
self.assertEqual(im.mode, reloaded.mode)
|
||||||
self.assertEqual(im.size, reloaded.size)
|
self.assertEqual(im.size, reloaded.size)
|
||||||
self.assertEqual(reloaded.format, "BMP")
|
self.assertEqual(reloaded.format, "BMP")
|
||||||
|
self.assertEqual(reloaded.get_format_mimetype(), "image/bmp")
|
||||||
|
|
||||||
def test_sanity(self):
|
def test_sanity(self):
|
||||||
self.roundtrip(hopper())
|
self.roundtrip(hopper())
|
||||||
|
@ -72,6 +73,20 @@ class TestFileBmp(PillowTestCase):
|
||||||
|
|
||||||
def test_load_dib(self):
|
def test_load_dib(self):
|
||||||
# test for #1293, Imagegrab returning Unsupported Bitfields Format
|
# test for #1293, Imagegrab returning Unsupported Bitfields Format
|
||||||
im = BmpImagePlugin.DibImageFile('Tests/images/clipboard.dib')
|
im = Image.open('Tests/images/clipboard.dib')
|
||||||
|
self.assertEqual(im.format, "DIB")
|
||||||
|
self.assertEqual(im.get_format_mimetype(), "image/bmp")
|
||||||
|
|
||||||
target = Image.open('Tests/images/clipboard_target.png')
|
target = Image.open('Tests/images/clipboard_target.png')
|
||||||
self.assert_image_equal(im, target)
|
self.assert_image_equal(im, target)
|
||||||
|
|
||||||
|
def test_save_dib(self):
|
||||||
|
outfile = self.tempfile("temp.dib")
|
||||||
|
|
||||||
|
im = Image.open('Tests/images/clipboard.dib')
|
||||||
|
im.save(outfile)
|
||||||
|
|
||||||
|
reloaded = Image.open(outfile)
|
||||||
|
self.assertEqual(reloaded.format, "DIB")
|
||||||
|
self.assertEqual(reloaded.get_format_mimetype(), "image/bmp")
|
||||||
|
self.assert_image_equal(im, reloaded)
|
||||||
|
|
|
@ -52,6 +52,10 @@ def _accept(prefix):
|
||||||
return prefix[:2] == b"BM"
|
return prefix[:2] == b"BM"
|
||||||
|
|
||||||
|
|
||||||
|
def _dib_accept(prefix):
|
||||||
|
return i32(prefix[:4]) in [12, 40, 64, 108, 124]
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Image plugin for the Windows BMP format.
|
# Image plugin for the Windows BMP format.
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
@ -291,7 +295,11 @@ SAVE = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _save(im, fp, filename):
|
def _dib_save(im, fp, filename):
|
||||||
|
_save(im, fp, filename, False)
|
||||||
|
|
||||||
|
|
||||||
|
def _save(im, fp, filename, bitmap_header=True):
|
||||||
try:
|
try:
|
||||||
rawmode, bits, colors = SAVE[im.mode]
|
rawmode, bits, colors = SAVE[im.mode]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
@ -306,14 +314,15 @@ def _save(im, fp, filename):
|
||||||
|
|
||||||
stride = ((im.size[0]*bits+7)//8+3) & (~3)
|
stride = ((im.size[0]*bits+7)//8+3) & (~3)
|
||||||
header = 40 # or 64 for OS/2 version 2
|
header = 40 # or 64 for OS/2 version 2
|
||||||
offset = 14 + header + colors * 4
|
|
||||||
image = stride * im.size[1]
|
image = stride * im.size[1]
|
||||||
|
|
||||||
# bitmap header
|
# bitmap header
|
||||||
fp.write(b"BM" + # file type (magic)
|
if bitmap_header:
|
||||||
o32(offset+image) + # file size
|
offset = 14 + header + colors * 4
|
||||||
o32(0) + # reserved
|
fp.write(b"BM" + # file type (magic)
|
||||||
o32(offset)) # image data offset
|
o32(offset+image) + # file size
|
||||||
|
o32(0) + # reserved
|
||||||
|
o32(offset)) # image data offset
|
||||||
|
|
||||||
# bitmap info header
|
# bitmap info header
|
||||||
fp.write(o32(header) + # info header size
|
fp.write(o32(header) + # info header size
|
||||||
|
@ -352,3 +361,10 @@ Image.register_save(BmpImageFile.format, _save)
|
||||||
Image.register_extension(BmpImageFile.format, ".bmp")
|
Image.register_extension(BmpImageFile.format, ".bmp")
|
||||||
|
|
||||||
Image.register_mime(BmpImageFile.format, "image/bmp")
|
Image.register_mime(BmpImageFile.format, "image/bmp")
|
||||||
|
|
||||||
|
Image.register_open(DibImageFile.format, DibImageFile, _dib_accept)
|
||||||
|
Image.register_save(DibImageFile.format, _dib_save)
|
||||||
|
|
||||||
|
Image.register_extension(DibImageFile.format, ".dib")
|
||||||
|
|
||||||
|
Image.register_mime(DibImageFile.format, "image/bmp")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user