diff --git a/Tests/images/hopper_draw.ico b/Tests/images/hopper_draw.ico new file mode 100644 index 000000000..014711896 Binary files /dev/null and b/Tests/images/hopper_draw.ico differ diff --git a/Tests/test_file_ico.py b/Tests/test_file_ico.py index 97fb781b3..53875eb72 100644 --- a/Tests/test_file_ico.py +++ b/Tests/test_file_ico.py @@ -1,7 +1,7 @@ from .helper import PillowTestCase, hopper import io -from PIL import Image, IcoImagePlugin +from PIL import Image, ImageDraw, IcoImagePlugin TEST_ICO_FILE = "Tests/images/hopper.ico" @@ -90,3 +90,16 @@ class TestFileIco(PillowTestCase): im = self.assert_warning(UserWarning, Image.open, "Tests/images/hopper_unexpected.ico") self.assertEqual(im.size, (16, 16)) + + def test_draw_reloaded(self): + im = Image.open(TEST_ICO_FILE) + outfile = self.tempfile("temp_saved_hopper_draw.ico") + + draw = ImageDraw.Draw(im) + draw.line((0, 0) + im.size, '#f00') + im.save(outfile) + + im = Image.open(outfile) + im.save("Tests/images/hopper_draw.ico") + reloaded = Image.open("Tests/images/hopper_draw.ico") + self.assert_image_equal(im, reloaded) diff --git a/src/PIL/IcoImagePlugin.py b/src/PIL/IcoImagePlugin.py index 5ffc86ea7..d6a6bc9d3 100644 --- a/src/PIL/IcoImagePlugin.py +++ b/src/PIL/IcoImagePlugin.py @@ -288,6 +288,9 @@ class IcoImageFile(ImageFile.ImageFile): self._size = value def load(self): + if self.im and self.im.size == self.size: + # Already loaded + return im = self.ico.getimage(self.size) # if tile is PNG, it won't really be loaded yet im.load()