额,我觉得这章还是很有必要的,因为有时候这个问题搞得我脑壳疼。
里面的逻辑有点反思维。。。
首先,先介绍一下这样一个图,明确图的长和宽。
OK,我们下面先上示例图。
这个图片的长是 320 宽是 510
即
image.size = (320,510)
假设,图片的名字是 1.jpg
按照列存像素信息
1 | from PIL import Image |
上面关键内容说明
size
data1
data1 = [data.getpixel((x,y)) for y in range(data.size[1]) for x in range(data.size[0])]
通过读代码我们得知,获取像素点的坐标是 (0,0),(1,0),(2,0)…(319,0),(0,1)…(319,509)
按照我们对坐标系的理解,其获取像素点的顺序应该是如下图所示:
但实际上,我们的像素获得点确是下面这个方式
让我来自圆其说一下,对于 PIL 的图理解方式来说,坐标的第一个代表的是列,第二个代表的是行。
好吧,就这样理解吧,虽然有点怪怪的。
经过十几分钟过的思考后,我终于想到了一个完美的解决方式,那就是坐标点对应的是坐标系,卧槽,老子可真是天才,看下图。
这样坐标系,就能完美的解释上面的问题了。
我再写一个代码验证一下。
验证猜测
1 | from PIL import Image |
画图
我们也知道 data1 是按照列的方式来的,但是我们在画图的时候确实按照行关系来的,所以我们要尤为注意各个像素点的信息。
也就是上面的自圆其说了解一下。。。