从 .png 文件裁剪整个白线时出现问题
Problems cropping entire white lines from .png file
我想要做的是裁剪掉给定 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
您的 getpixel()
调用实际上是在以错误的方式搜索坐标,因此实际上您是在扫描左边缘。您可以使用以下方法。这将创建一行仅包含白色像素的数据。如果行的长度等于你的宽度,那么你就知道它们都是白色的。
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
我想要做的是裁剪掉给定 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
您的 getpixel()
调用实际上是在以错误的方式搜索坐标,因此实际上您是在扫描左边缘。您可以使用以下方法。这将创建一行仅包含白色像素的数据。如果行的长度等于你的宽度,那么你就知道它们都是白色的。
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