python清理ios屏幕截图的状态栏。状态栏中的时间保持不变,但所有其他图形都被删除并替换为w(代码片段)

author author     2022-12-29     637

关键词:

#!/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.

  Strip out everything except the clock and replace with minimal
  graphics that show full battery and signal strength.'''
  
  # This is for retina displays.
  height = 40
  clockwidth = 160

  # 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',
                     (160, 40),
                     ['eJxjYBgFo2AUjIJRMJIBq8dAuwAvcHl5d6CdgA8Y/fy/AIcUq3',
                      'vH7gcf/396sLvDnZWebkIGa/5/ksMqIdf35j8CvOmTp7PDoODl',
                      'ax9swrw9P/+jgp89/PR1mcusEytrnRuq5l0426iHJmd5H+SkE1',
                      'UOkkwMTJL2lcdA3PtW+IyTm/7w56Pp8hTyEKD8H1Lg/E1BkUv4',
                      'BRRbp4skorsGFIRxuJ3n/gls0GcPingIYIMae2Uokp4//7/xQt',
                      'Pg+eb/T3QxBFD4CDXoswIFPCSwF8V5M9GsCzunBCRZvGdfeP//',
                      '/YXZPixAntK5MJzOY5gBN2oGBTwEYEeO3f//TdDtY2JgYIy7D5',
                      'e/H88IFsMJHsGVPqKAhwAaKM57iMVGwe0oSnYI4XEdA8MPuMKf',
                      'jOTzEMAWxfJLWGwsAoq/bzbnZOAwb3oFZBfjdR+1w08GxX0/BL',
                      'FYOe3/fBEok3vG/6WMWJQgACIdzaSAhwCMX1Ec2InFSmZfJI43',
                      'G17nMSh8gpoEyZVk8pDAIRT3/cvDnvh1Fj7++XihLlY5VEDt8i',
                      '/iPyrwx2apz2+w3G+sVSAakJvx6OejGfIU8uCA5TGK855ibaBw',
                      'HgRLHuIiwn3UBlko7kvErojvNFDuNJ0bBlCwBsl5G3GVvaJX/l',
                      '8Vpauz4IDvLNBh706B0udR3BEovVOGjm5CAYyu2dqMDIyaSU74',
                      'y7ZRMApGwSgYBaOAigAA3eJAYw=='])
  rimg = PackedImage('L',
                     (140, 40),
                     ['eJztlmtIFFEYhr/1srp4ScOktDQhtSzBIpOQilJbCbJAzTKFUg',
                      'sisigIQSy7oYH+CCNSs4i0SA3qR4oGQsmilGliYUlZIpHhpdt6',
                      '2didtzNz1t1V0F1t/Tfvj+8778x3Ds/MOWfOEMmSJUuWLFnzlT',
                      'Ix1tIeaINtaku1OnRlJs++NzvG+57GGa+mNH7VviryNLq0ltGu',
                      'iw5GU4T9Ft1TNGttfIYwTYqVio0olvL6IRg0w8Alyd0CvrUC/Y',
                      'GSS0f5llzhOu+gFios+3cGF9j4XgqDO2dH8XjNWZze4N5Sck7W',
                      'C9HMJUMb50Ar69AgFXW3K4jujXuLbd+B926WAwiKCRtZdApBMT',
                      'NIaGHlL3AWNQakCbmGWhZbcFY0/lqsY2kZClhMg7hMFHW6DVPG',
                      'EBSCjSyYlSVRKpFYSnBBuuQPrTMtEXQukitHDonTmC3RHmTxFE',
                      '5PHcNeLAqlUpnGWZqQyK8NYRVtRRc3J1DFYhjOsJiA3UQRE3XT',
                      'xpsbi/bx8plxKIWzfIRxO7RgB5uOGm7UaGbRXV/KYi5Wk6p7wH',
                      'da/7mxCGiyzvIdQdw/QwIdw11uotEuptphP/L6rCEqFdREbpHe',
                      '/8Eyap1lBH7c1yGJslHGzSa8E1PQh5/1Q/1r2PoqImWVQYdGr3',
                      'mzYJY1Y2QZRAD3DdhLx3Gbm83gnwSPPblJi2nFSJuSSgz7nGLG',
                      'nyzke+lHKPfPEU+ZeMDNdrSaKx1faENI9aeaNW8Y/OfLYsN6aY',
                      'Wa+z6EUzxauDmMR+bKc8ggCsdJ1jyEybNiriz1gdZZqqR9y2YD',
                      'encKxm9+sxhXTYXR+ocsxohAlATT0WKv74sFSzpapcKj0i7+hF',
                      '2ice1FzGSdV98XccFGSN+9DGxbQBbvYRxhyWcQWSzloUfFUj56',
                      'nSfrqvXiQUXu45Uslup8zCz2OY8sWCgVeJlzfxRNYr3LW/yoyO',
                      'uCwfRasnCeN0r/7lTETtwx9e8MvmwjyxVr57SJhdQ9rH6s0FUy',
                      'nmXi03ZETVaFjjY78paqWhgz1KjM/e34/2Ih76ggB5NxDIn0MN',
                      '9Kzg8wtT0iF1n2sud/nSxZsmTJWlD9A546FLU='])

  # 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])
  cl = (width - clockwidth)/2
  cr = cl + clockwidth
  
  # Cover over the statusbar except for the time.
  # Use the colors along the left edge.
  for y in range(height):
    p = screenshot.getpixel((0, y))[:3]
    screenshot.paste(p, (0, y, cl, y+1))
    screenshot.paste(p, (cr, y, width, y+1))

  # Decide whether the overlay text and graphics should be black or white.
  if sum(p)/3 > 192:        # p is the last color from the loop above
    textcolor = 'black'
  else:
    textcolor = 'white'

  # Create the masks.
  lmask = limg.unpack()
  rmask = rimg.unpack()

  # Make the overlays.
  left = Image.new('RGBA', limg.size, textcolor)
  left.putalpha(lmask)
  right = Image.new('RGBA', rimg.size, textcolor)
  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
  screenshot = photos.pick_image()
  photos.save_image(cleanbar(screenshot))

iOS 状态栏中的加载指示器

】iOS状态栏中的加载指示器【英文标题】:LoadingIndicatorinStatusBariOS【发布时间】:2012-06-1913:18:57【问题描述】:我试图弄清楚状态栏中的加载圆圈动画是什么。很多应用程序在加载数据时,在状态栏中有一个微调器来指示应用程... 查看详情

科尔多瓦 - 状态栏中的图像

...?我找不到与此相关的任何内容:谢谢!编辑1我当前的屏幕:我的代码:<ion-content><ion-imgsrc="https://i.imgur.com/whAtFTP.png"> 查看详情

如何打开iOS状态栏中的网络指示灯? [复制]

】如何打开iOS状态栏中的网络指示灯?[复制]【英文标题】:HowtoturnonthenetworkindicatorintheiOSstatusbar?[duplicate]【发布时间】:2012-05-0504:57:22【问题描述】:我知道这些指标不止一个。谢谢。【问题讨论】:除了用户设备已经显示的... 查看详情

iOS - 更新多任务栏中的媒体播放/暂停状态

】iOS-更新多任务栏中的媒体播放/暂停状态【英文标题】:iOS-updatingthemediaplay/pausestateinthemultitaskingbar【发布时间】:2013-04-2418:15:59【问题描述】:我们有一个使用AU图-CoreAudioAPI-来播放音频的工作应用。图形始终在运行,各种源... 查看详情

以编程方式在iOS中使用状态栏捕获完整屏幕截图

】以编程方式在iOS中使用状态栏捕获完整屏幕截图【英文标题】:CapturingfullscreenshotwithstatusbariniOSprogrammatically【发布时间】:2012-01-2011:03:11【问题描述】:我正在使用此代码截取屏幕截图并将其保存到相册中。-(void)TakeScreenshotAnd... 查看详情

Android状态栏中的动画

...oid新手。我想在手机中制作一个电池充电动画,例如,在屏幕右上角,充电时上下颠倒的小图标,在当前电池百分比时停止.到目前为止,在我的代码中,我已经能够让它移动,但它永远不会停止。我想要的是动画在不充电时停... 查看详情

如何隐藏或删除 Apple Watch 状态栏中的时间?

...45:50【问题描述】:如何在我的应用程序的AppleWatch状态栏屏幕上隐藏或移除小时钟?我在网上搜索了这个但一无所获!我刚刚发现,如果你删除那个时钟,Apple会拒绝你的应用,但我的应用本身就是一个表盘,不需要显示那个时... 查看详情

了解隐藏在状态栏中的幻数

】了解隐藏在状态栏中的幻数【英文标题】:Understandingthemagicnumberhiddeninthestatusbar【发布时间】:2018-03-0105:16:18【问题描述】:要获取iOS应用状态栏的height,我们这样做letheight=UIApplication.shared.statusBarFrame.heightprint(height)这会在正... 查看详情

iOS推送通知-在“警报”标签中处理/编辑消息,然后在状态栏中的通知中显示它

】iOS推送通知-在“警报”标签中处理/编辑消息,然后在状态栏中的通知中显示它【英文标题】:iOSPushnotification-Handle/Editmessageinthe\'alert\'tagbeforeshowingitinthenotificationinstatusbar【发布时间】:2015-09-0802:25:48【问题描述】:我在推送... 查看详情

更改状态栏中的链接

】更改状态栏中的链接【英文标题】:Changelinkinstatusbar【发布时间】:2014-04-1922:00:25【问题描述】:我正在寻找一种方法来更改浏览器状态栏中的链接,类似于google和yahoo用来显示其搜索结果的方法。这是我的示例代码<html>&... 查看详情

删除 TinyMCE4 状态栏中的路径

】删除TinyMCE4状态栏中的路径【英文标题】:RemovepathinstatusbarinTinyMCE4【发布时间】:2013-06-1603:04:50【问题描述】:我刚刚从TinyMCE3迁移到TinyMCE4,我想知道如何删除状态栏中的路径。但我想保留我的状态栏以便具有调整大小的功... 查看详情

iOS系统状态栏中/上的消息[关闭]

】iOS系统状态栏中/上的消息[关闭]【英文标题】:Messagein/oniOSSystemStatusBar[closed]【发布时间】:2012-12-1021:12:46【问题描述】:如何在iOS应用的状态栏中/上添加自定义消息(见图)?这是我图片的另一个链接:http://jonathangurebo.tumbl... 查看详情

导航栏中的 SwiftUI 元素不响应状态

】导航栏中的SwiftUI元素不响应状态【英文标题】:SwiftUIElementsinNavBarDon\'tRespondtoState【发布时间】:2021-03-0700:06:52【问题描述】:我的目标是当键盘可见时在SwiftUIiOS应用程序的导航栏中显示一个按钮,并在键盘不可见时隐藏它。... 查看详情

截图 App Store:状态栏或无状态栏

...6和6plus进行了优化,这意味着我必须提交所有这些设备的屏幕截图。6号和6号加号我没问题。5.5英寸(iPhon 查看详情

如何在tkinter python的状态栏中显示行号和列号

】如何在tkinterpython的状态栏中显示行号和列号【英文标题】:Howtoshowlinenumberandcolumnnumberinstatusbarintkinterpython【发布时间】:2021-11-1212:37:24【问题描述】:我想在状态栏中添加行号和列号,但我不明白如何添加。请帮助我,如何... 查看详情

PhoneGap 2.7 在状态栏中显示活动指示器

】PhoneGap2.7在状态栏中显示活动指示器【英文标题】:PhoneGap2.7showactivityindicatorinstatusbar【发布时间】:2013-06-0408:47:20【问题描述】:我使用的是PhoneGap2.7和iOS6。每当我从服务器加载一些数据时,ios状态栏中的活动指示器都不会出... 查看详情

iOS Phonegap中的白色状态栏?

】iOSPhonegap中的白色状态栏?【英文标题】:WhitestatusbariniOSPhonegap?【发布时间】:2013-12-0210:52:36【问题描述】:如何在iOS7的Phonegap3.1.0中用白色文本使顶部状态栏半透明?应用在移动Safari中看起来不错,但是当我尝试在Phonegap中... 查看详情

状态栏中的应用程序菜单在 Snow Leopard 上不起作用

】状态栏中的应用程序菜单在SnowLeopard上不起作用【英文标题】:MenuofappinStatusBarwontworkonSnowLeopard【发布时间】:2009-11-0418:06:24【问题描述】:我有一个位于Mac状态栏中的应用程序。它有一个菜单,可让您查看应用版本、更改一... 查看详情