2013-08-17 6 views
1

Встроенная MacOS программа захвата экрана (Command-Shift-4) имеет хорошую функцию, где вы можете нажать пробел и захватить только окно, как это:Программным удалить Apple, Screen Capture теневые границы

enter image description here

Я хотел бы программно посмотреть каталог изображений (они являются PNG), определить, есть ли у них тень, и автоматически обрезать его. Мне нужно это для работы на Mac. Я бы хотел написать это на Python. Мне сказали, что Pillow - это правильный способ управления изображениями на Python, но я не уверен, как читать отдельные пиксели и обрезать изображения.

ответ

0

Здесь это код, который использует 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") 
0

Вот некоторые рекомендации, независимо от библиотеки, которую вы будете использовать.

В окне есть инварианты: 4 угла, строка заголовка с главным образом однородным цветом и 3 дискообразными кнопками.

Если вы можете обнаружить кнопки и строку заголовка, вы можете легко найти верхние углы. Нижние углы симметричны верхним углам.

Возможное решение

  • Применить Hough transform найти круги
  • найти 3 последовательных кругов вдоль горизонтальной оси (кнопки)
  • Применить преобразования Хока, чтобы найти вертикальные и горизонтальные линии
  • найти Квадрат, содержащий 3 круга (строка заголовка)
  • 2 верхних угла окна расположены вокруг верхних углов заголовка.
  • Форма патча, принимая окрестности вокруг угла
  • Нанести edge detection алгоритм в патче
  • Reflect пикселей пластыря вертикально
  • Применить патч соответствие вертикально. Например, с DP
  • Повтори согласующий для 2 верхних углов, чтобы найти нижние

С 4 углом вы знаете ограничительную рамку окна, и вы можете решить проблему ПОДРЕЗКИ

+0

На самом деле, это намного проще. Тень всегда в одном и том же цвете. Я просто хочу проверить, что он есть и удалить его. Я ищу конкретные вызовы Python для создания библиотеки изображений. Возможно, это может быть купол просто с ImageMagick? – vy32