我正在使用某些像素的Alpha值来跟踪旋转期间的位置。我注意到在某些情况下我会丢失设置的Alpha值。显示问题的示例代码:
def showAlphas(rotation, img):
imgPixels = img.load()
foundAlpha = False
for w in range(0, img.width):
for h in range(0, img.height):
if imgPixels[w, h][3]==50:
print 'Found at {}, {} in Rotation {}'.format(w, h, rotation)
foundAlpha = True
if not foundAlpha:
print 'Alpha missing from rotation {}'.format(rotation)
img = Image.new('RGBA', (100, 50), color='black')
img.putpixel((10, 10), (255, 0, 0, 50))
for x in range(1, 360, 1):
rotated = img.rotate(x, expand=True)
showAlphas(x, rotated)
样本输出:
Found at 96, 41 in Rotation 194
Found at 96, 41 in Rotation 195
Alpha missing from rotation 196
Found at 98, 41 in Rotation 197
Found at 97, 41 in Rotation 198
Found at 98, 41 in Rotation 198
Alpha missing from rotation 199
Alpha missing from rotation 200
Found at 98, 41 in Rotation 201
Found at 97, 40 in Rotation 202
Found at 98, 40 in Rotation 202
使用枕头5.3.0
我在轮换中做错了吗?据我所知,Expand = True是我需要指定的唯一选项(以确保图像不会在某些方向上被裁剪)?
我并不局限于使用Pillow,而是需要一些东西来跟踪各种调整大小和旋转操作中的特定像素坐标,并认为使用Pillow和跟踪Alpha值可以做到这一点。我并不是很想尝试通过RGB值进行跟踪,但是担心这可能会遇到相同的问题。还有其他建议吗?
答案 0 :(得分:2)
不确定我是否能很好地说明我在评论中所说的话-我希望在Wikipedia上找到出色的动画,但不幸失败了。无论如何,我说的是旋转后输入图像中的像素与输出图像中的像素之间没有一一对应的关系。
有时您会使用插值法,这意味着在多个邻居之间缩放值,并且在输出图像中裁剪出一组新的像素值,而这些像素值在输入图像中不存在(想象将黑色图像旋转为白色图像)某些斑点可能会变成灰色),有时您选择NEAREST_NEIGHBOUR,并且不会在图像中引入新的像素值。
无论哪种方式,这都是我试图说明旋转的图形。您有两张图像,一幅是红色,一幅是黑色,像素在直线的交点处。一幅图像绕中心像素旋转到另一幅图像上方,因此黑色和红色图像相同。
现在看一下我用绿色框起来的像素。它不会进入输出图像,因为它周围的四个角都更接近原始图像中的其他像素。因此,我要说的是原始像素沿蓝线跳入了输出图像,但是绿色像素没有实现……希望您能理解!