簡體   English   中英

為什么不能將Image.putpixel()視為更改大量像素顏色的好選擇?

[英]why is Image.putpixel() not considered a good option for changing extensive pixel colors?

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)

PS: -我想知道是否Image.getpixel()相對的方法putpixel()遭受同樣的缺點嗎? 由於它的文檔中沒有提到。

如果您要六個蘋果,一次去商店購買六個蘋果比一次去商店六次並每次購買一個蘋果要快得多。 設置像素也是如此。

看一下putpixel方法在做什么:

  1. 它會進行各種檢查,例如圖像是否為只讀圖像,實現是否使用pyaccess以及圖像使用哪種顏色模式。
  2. 它可以檢查並驗證像素數據的類型和尺寸
  3. self.im.putpixel毫無疑問對坐標做同樣的self.im.putpixel ,並且self.im.putpixel倍數來找到偏移量
  4. 最后,它可以執行實際的操作:設置四個字節的像素數據。

那是許多操作,屬性訪問和方法調用,它們僅需很小的操作。 如果多次調用putpixel ,它將每次重復所有這些操作。

如果您要求它同時做多個像素,則可以跳過下一個像素的步驟1-3,因為它是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM