Però a fin di bene. Si parla di chi usa a scopo lavorativo o decorativo schermate scattate su iPhone e non è soddisfatto di come appare la barra di stato, magari con una batteria all’ultimo sospiro, o con ricezione insoddisfacente, o semplicemente con una dizione TIM quando si va a incontrare persone Vodafone o tutti i viceversa.
Dr. Drang ha preso a cuore la questione fino a produrre la versione per lui definitiva di uno script capace di ripulire come desidera la barra di stato di iPhone usando Pythonista (6,99 euro).
Il livello di dettaglio dell’operazione è invidiabile e l’impresa si ammira per la minuzia.
Termino incollando qui sotto una quantità di testo del tutto inutile per la comprensione di questo post e anche in se stessa, perché lo stesso testo si può trovare in modo molto più fruibile su GitHub. Invito solo a guardarlo bene e a pensare che è fatto per stare su un iPhone. Mentre lo si guarda, pensare che secondo qualcuno non si può programmare su iPad.
#!/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),
['eJztlltIFFEYx896v6SSKCaJ2uZDD22UUVtBJBWZaS9BSgnWQy',
'ShvSgk9hLdTMl8ENIVozCSCsTqKUW6qFCiYQaZ2oOrq4iUtKm4',
'OW7MvzOzM7Ozl3bE8RI0v4fzne+cb2f+/z1nzgwhGhoaGhoaGh',
'r/AxF6vZ8jyAjlpwLjdM4ij1kZgenlbSPTmBlpK08PXEXtchqB',
'TBryISedjuhbFjBXE80Xec7KSKyakk1OVSWtugfK+l9zeEbj4a',
'ccoxjg4zZCwobRdf87Ov2Jt1knEZUMXGEqo1bfRyGujtvjxOwR',
'bord02gmJGgEu521slmJvWZOetfltHg/4hd/oPQdl5r3LeLOib',
'WjjKU2SWUm8pHV30aJF6WXUETbauT49HF2gcpuNshGDE3ckuQp',
'2kif4Rdv9qiqTCQVHWQ7hrwoTUMrbd9ji08fGQymjrmPTYFxH/',
'MgeVrYhbPJKjKJGpwjpB/7PZUGD+MEuYEnsmJv+yq7V0/bgMz6',
'PiusffVZATTT92Yr2SAm6XEyqchEQn7aIgkpxUMvSg+y1la0r1',
'PwQeihrcszS1c3n9HxY0pYpF9YVGQiuXhM22TWFuWpNHYQqAqS',
'39urD3rkvYSclmhlF4TMS/WMbumZyFtkcKETFzyUnrSyX/CC1g',
'b4K/goohe1XjeGkhDjtW+0X7wYH8u6HimY5EXm44O70vPsxJ6Q',
'LpSRGLQp+KAP2YMYoRtuQqPOa5Ebzn1epyITKANr5/gN7HBVus',
'k2t5mQDeM4dQh3lXz4H5clmUFea9xJnhHkOE6hJWbC/SfQ080z',
'LoiVlBY7joOdNlsrPbYUfHBsbRhjxhoMf533YBnfH1noFnpH8C',
'PERek9XORjDjAp/cE+fGTZ+avbsxZvJNFkYSymJJUZx3MUCD26',
'MrkuSitQ4+i8xlfpa8mHj9B23kdH2OJ9LBtxdkY6Iu/gDRckpb',
'swb+RiBebxSvwU97WvInuojZ41+EAkpARNUj8VbAqRK62DvaGw',
'egADiZ/QIIz58kFiP6M/dqWk+mQQst3cj1vERWnBEAtMV0eShA',
'lccQz59EE2tiasjE61hBsNwWutQUNDQ0NDQ+Pf4g+RSY1o'])
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()