Skip to content

Instantly share code, notes, and snippets.

@danielsharvey
Last active September 15, 2022 14:32
Show Gist options
  • Save danielsharvey/929a525712a2b89ebb561226cc32f3e7 to your computer and use it in GitHub Desktop.
Save danielsharvey/929a525712a2b89ebb561226cc32f3e7 to your computer and use it in GitHub Desktop.
Converting iPhone iOS '.cpbitmap' images to PNGs
#!/usr/bin/python
from PIL import Image,ImageOps
import struct
import sys
if len(sys.argv) < 3:
print "Need two args: source_filename and result_filename\n";
sys.exit(0)
filename = sys.argv[1]
result_filename = sys.argv[2]
with open(filename) as f:
contents = f.read()
unk1, width, height, unk2, unk3, unk4 = struct.unpack('<6i', contents[-24:])
im = Image.frombytes('RGBA', (width,height), contents, 'raw', 'RGBA', 0, 1)
r,g,b,a = im.split()
im = Image.merge('RGBA', (b,g,r,a))
im.save(result_filename)
@weedy
Copy link

weedy commented Sep 13, 2020

Looks like iOS 13 broke all of these.

Also needs to be converted to python3/PIL7. Thankfully I have a iOS12 backup still and gentoo gives me every python/PIL combo I could ever want.

@sh00tg0a1
Copy link

@donly @weedy
I have updated the code. It is compatible with python3/PIL now. You can find the code here
.

@danielsharvey
Copy link
Author

@sh00tg0a1 Thanks

@hthetiot
Copy link

hthetiot commented Aug 7, 2021

@ainsleyrutterford
Copy link

A browser based version I created based off of that Node.js Stack Overflow answer. It works in all modern browsers and should work with all versions of iOS so far: https://cpbitmap.github.io/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment