Проблемы с обрезкой целых белых линий из файла.png
Что я хочу сделать, это обрезать белые линии над данным экраном печати Instagram. Я попытался сделать это, найдя центр изображения и двигаясь вверх, строка за строкой, пока не нашел первую строку полностью белой. Есть идеи, почему мой код не работает?
from PIL import Image
image_file = "test.png"
im = Image.open(image_file)
width, height = im.size
centerLine = height // 2
entireWhiteLine = set()
entireWhiteLine.add(im.getpixel((0, 0)))
terminateUpperCrop = 1
while terminateUpperCrop != 2 :
for i in range(centerLine, 1, -1) :
entireLine = set()
upperBorder = i - 1
for j in range(0, width, 1) :
entireLine.add((im.getpixel((i, j))))
if entireLine == im.getpixel((0,0)):
box = (0, upperBorder, width, height)
crop = im.crop((box))
crop.save('test2.png')
terminateUpperCrop = 2
1 ответ
Решение
Ваш getpixel()
call на самом деле ищет координаты в неправильном направлении, поэтому вы сканировали левый край. Вы можете использовать следующий подход. Это создает строку данных, содержащую только белые пиксели. Если длина строки равна вашей ширине, то вы знаете, что все они белые.
from PIL import Image
image_file = "test.png"
im = Image.open(image_file)
width, height = im.size
centerLine = height // 2
white = (255, 255, 255)
for y in range(centerLine, 0, -1) :
if len([1 for x in range(width) if im.getpixel((x, y)) == white]) == width - 1:
box = (0, y, width, height)
crop = im.crop((box))
crop.save('test2.png')
break