内置的 MacOS 屏幕捕获程序 (command-shift-4) 有一个很好的功能,您可以点击空格键并捕获一个窗口,如下所示:
我想以编程方式查看图像目录(它们是 PNG),确定它们是否有阴影,然后自动裁剪它。我需要它才能在 Mac 上运行。我想用 Python 写这个。有人告诉我Pillow是现在在 Python 中管理图像的正确方法,但我不确定如何读取单个像素和裁剪图像。
内置的 MacOS 屏幕捕获程序 (command-shift-4) 有一个很好的功能,您可以点击空格键并捕获一个窗口,如下所示:
我想以编程方式查看图像目录(它们是 PNG),确定它们是否有阴影,然后自动裁剪它。我需要它才能在 Mac 上运行。我想用 Python 写这个。有人告诉我Pillow是现在在 Python 中管理图像的正确方法,但我不确定如何读取单个像素和裁剪图像。
下面是使用 Python Image Library 和 Python 2.7 来实现这一点的代码:
#!/usr/bin/env
# Removes the shadow from MacOS-Generated screen shots.
import Image,os
if __name__=="__main__":
image = Image.open(os.sys.argv[1])
image = image.convert('RGBA')
(width,height) = image.size
def find_first_non_alpha_x():
for i in range(width):
if image.getpixel((i,height/2))[3]==255:
return i
raise RuntimeError("No non-alpha pixels on midline")
def find_last_non_alpha_x():
for i in range(width-1,0,-1):
if image.getpixel((i,height/2))[3]==255:
return i
raise RuntimeError("No non-alpha pixels on midline")
def find_first_non_alpha_y():
for i in range(height):
if image.getpixel((width/2,i))[3]==255:
return i
raise RuntimeError("No non-alpha pixels on midline")
def find_last_non_alpha_y():
for i in range(height-1,0,-1):
if image.getpixel((width/2,i))[3]==255:
return i
raise RuntimeError("No non-alpha pixels on midline")
x1 = find_first_non_alpha_x()
y1 = find_first_non_alpha_y()
x2 = find_last_non_alpha_x()
y2 = find_last_non_alpha_y()
y = image.crop((x1-1,y1-1,x2+1,y2+1))
y.save(os.sys.argv[1]+"-cropped.png")
无论您将使用哪种库,这里都有一些建议。
窗口上有不变量:4 个角,标题栏颜色基本一致,3 个圆盘形按钮。
如果您可以检测到按钮和标题栏,则可以轻松找到顶角。底角与顶角对称。
一个可能的解决方案
通过 4 个角,您知道窗口的边界框,您可以解决裁剪问题