Skip to content

Commit

Permalink
Merge pull request #4741 from radarhere/icns
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk authored Jun 29, 2020
2 parents 15f1e18 + 1e8d418 commit 74a4c88
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
13 changes: 13 additions & 0 deletions Tests/test_file_icns.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,19 @@ def test_save_append_images(tmp_path):
assert_image_equal(reread, provided_im)


@pytest.mark.skipif(sys.platform != "darwin", reason="Requires macOS")
def test_save_fp():
fp = io.BytesIO()

with Image.open(TEST_FILE) as im:
im.save(fp, format="ICNS")

with Image.open(fp) as reread:
assert reread.mode == "RGBA"
assert reread.size == (1024, 1024)
assert reread.format == "ICNS"


def test_sizes():
# Check that we can load all of the sizes, and that the final pixel
# dimensions are as expected
Expand Down
8 changes: 8 additions & 0 deletions src/PIL/IcnsImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,10 @@ def _save(im, fp, filename):

# iconutil -c icns -o {} {}

fp_only = not filename
if fp_only:
f, filename = tempfile.mkstemp(".icns")
os.close(f)
convert_cmd = ["iconutil", "-c", "icns", "-o", filename, iconset]
convert_proc = subprocess.Popen(
convert_cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL
Expand All @@ -349,6 +353,10 @@ def _save(im, fp, filename):
if retcode:
raise subprocess.CalledProcessError(retcode, convert_cmd)

if fp_only:
with open(filename, "rb") as f:
fp.write(f.read())


Image.register_open(IcnsImageFile.format, IcnsImageFile, lambda x: x[:4] == b"icns")
Image.register_extension(IcnsImageFile.format, ".icns")
Expand Down

0 comments on commit 74a4c88

Please sign in to comment.