QuickLoox

Dal mondo Apple all'universo digitale, in visualizzazione rapida dell'ovvio

Falso in scatto pubblico

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()