Image.putpixel()
的文档中指出:-
修改给定位置的像素。对于单波段图像,颜色是单个数值,对于多波段图像,颜色是元组。
请注意,此方法相对较慢。要进行更广泛的更改,请改用
paste()
或ImageDraw
模块。
很明显,文档指出此方法相对慢,如果图像中的更改数量很大,则应考虑其他方法。
但是没有明确的原因,为什么?
我尝试对putpixel()
方法进行源代码分析,但无法推断出任何内容。
putpixel()
的来源:-
def putpixel(self, xy, value):
if self.readonly:
self._copy()
self.load()
if self.pyaccess:
return self.pyaccess.putpixel(xy, value)
if self.mode == "P" and isinstance(value, (list, tuple)) and len(value) in [3, 4]:
# RGB or RGBA value for a P image
value = self.palette.getcolor(value)
return self.im.putpixel(xy, value)
P.S。:-:我想知道Image.getpixel()
(与putpixel()
相对的方法)是否也遭受相同的缺点?正如其文档中未提到的那样。
答案 0 :(得分:0)
如果您想要六个苹果,那么一次去商店购买六个苹果要比去商店六次并每次购买一个苹果要快得多。设置像素也是如此。
看看putpixel
方法在做什么:
self.im.putpixel
无疑对坐标做了相同的操作,并且乘以倍数来找到偏移量这是许多操作,属性访问和方法调用,仅需很小的操作。如果您多次调用putpixel
,它将每次重复所有这些操作。
如果您要求它同时做多个像素,则可以跳过下一个像素的步骤1-3,因为它是相同的。