Skip to content

Instantly share code, notes, and snippets.

@sillygwailo
Forked from drdrang/LTE Statusbar.py
Last active December 31, 2015 19:08
Show Gist options
  • Save sillygwailo/8031212 to your computer and use it in GitHub Desktop.
Save sillygwailo/8031212 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
import Image
import base64, zlib
# Jay Parlar convinced me to turn this data structure
# from a dictionary into an object.
class PackedImage(object):
def __init__(self, mode, size, data):
self.mode = mode
self.size = size
self.data = ''.join(data)
def unpack(self):
return Image.fromstring(self.mode,
self.size,
zlib.decompress(base64.b64decode(self.data)))
def cleanbar(screenshot):
'''Clean up the statusbar in an iOS screenshot.
Cover the signal strength, battery, location, and bluetooth
graphics with full strength symbols.'''
# This is for retina displays.
height = 40
# Statusbar image data for an iPhone 4, 4s, 5, 5c, or 5s portrait screenshot.
# The data string is compressed and base64-encoded.
limg = PackedImage('L',
(200, 40),
['eJztl19IU1Ecx8+5uzYy00DDMdacySgIfUgQjYjIIkn692BPGQ',
'Up9CZS0SJCoqKeEiK2USBSaEUYBQ2iolJEegjLih6KsBkG2ggn',
'2ea956ydc8/m1c4tt7tmyPm83H3P3c5+n51/dwAIBAKBQCAQLH',
'Kk0hlkkFfu1N8srbAuVF2pUhRRk5TB2ugNi+7mI2UN/HsXo36J',
'XKq+jumog6OJly3SP6pdT5ESu3+bUQy2ql16j6d47Tw8FO0zjh',
'OeOB341klydUPlFX3h8WyYRx+miXvYLQwA8itL9Tefp+IBJEK9',
'esBCrhAo3Tm0RfpDF07v52jQW2IyMQ+bLs7+zr6UPCg71EbIae',
'azPRwjTNaZShwPR1MtrcKxv/36UTvoZx4Fe9o6T9UvzbSHayKm',
'MekykXgetdN0ne8NqQij7w0DmkfNBxLVwXX8wUnbwxdL4DOReB',
'7aOt8dVU9XrNhy78d4jHhUT+Gr6/OretDEaq5I2h7BZD1BEynp',
'EbirYWUe0mvcJEMAc7ow9ejFZ0i0dGB+ZUYeg8ePEQ4abruRZD',
'1RmH5KemBGLvPYrAwvoffc08SjWhlZTqMtjJ28cow8It8ofYbD',
'kuHxKLdpAObRjK5pPyF8R9bHIXSTVdKPt/EmlpFHt1UmGM+umX',
'nuN5GSHnPXxwXUxqbCA+JxHp1lsQMf4c2R9PerMCtH24XSTIYe',
'HnSRlfuMeHhQO4t3cGMq47GA5wf12Kf2sAN6hKyPBjXACnqDqz',
'PrAZy+YDToKzGZDDxWTUW0d+xSiUfJz6j2tLhJCRXwijHhkTl4',
'58cV9KQwHtwfY3TfvYR6i+PRNYRbuVvof+the4k+eVs7x9++p+',
'd54QAaudziC+FALrcL5UXzYQoZRZ1Honljlp53f/MAef4xhCIP',
'ix9rzyXWc18QQsOtOfwuFIw0dsJZHolmbzb+fwBZ1gXIdntJLq',
'tcZgEWGbJor1kpG5UjJ4C0Bzi3OSsaRsA5kyEbc0MgEAgEgkXO',
'L9s6Uf4='])
rimg = PackedImage('L',
(130, 40),
['eJxjYBgFo2AUDFHwX3XAXfBfm462Ga+9j8UF//XpZv+KV//LsL',
'ngvzld7Pc6ALTqFaY4yAX/bdFF9/0nFhwgznq25Ktg5cVIYoy7',
'OSAusAFKuKCq3/k/hkiPRf7fSYQqvtJX38AOuGCMJLr9/38OsA',
'sY5YFSfig6/vsTHQb+/wnaLzvh80OoapT4/vP//z8OsAsYeIHs',
'cBQXMBHtAqb/TPjtN176B674AYoMx6//oFAAuwA9EKjnAte9n4',
'GK/kEVW6FKsnwCOQHoAsn/6GmRSi5gS7j0/zuS2tfoCpieg8WV',
'/2MUCaS54P9/a6wOMH6CpjYdQwnjDagUeslMqguwpsZL79GU/s',
'Gm6gRYShpdmCouQAbghFCPVQokY4wpSqoLCOQHiAsEsUiwvgKb',
'glE90iQM1mARF4QZo0cPF2BpBqgAhQ9D8oIpZS5wJMIFFzBFHY',
'H6J4FKJGEgw44CFxCyHuICSwzBTKD2NEipzA0sHr1o7AKM0oiB',
'AVgiOjEgXOBDYxdglkYMvJ/ASQPoAvH/6NUzdetGkIG/8Mj9V/',
'2P0UShdvuA4V8dPhf8x9JMo3Yb6SEeOZAptG+qFuF3gRbNHYAX',
'AEukgXUAw3+5AXbAKBgFwxUAAElqKPY='])
# Calculate various dimensions based on the size of the screenshot.
width = screenshot.size[0]
lbox = (0, 0, limg.size[0], limg.size[1])
rbox = (width - rimg.size[0], 0, width, rimg.size[1])
# Decide whether the overlay text and graphics should be black or white.
# The pixel at (width-13, 21) is in the button of the battery.
p = screenshot.getpixel((width-13, 21))[:3]
if sum(p) > 3*250:
symbolcolor = 'white'
else:
symbolcolor = 'black'
# Create the masks.
lmask = limg.unpack()
rmask = rimg.unpack()
# Make the overlays.
left = Image.new('RGBA', limg.size, symbolcolor)
left.putalpha(lmask)
right = Image.new('RGBA', rimg.size, symbolcolor)
right.putalpha(rmask)
# Paste the overlays and return.
screenshot.paste(left, lbox, left)
screenshot.paste(right, rbox, right)
return screenshot
# And here we go.
if __name__ == '__main__':
import photos, console
screenshot = photos.pick_image()
console.clear()
cleanbar(screenshot).show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment