国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

Pillow 編寫圖像插件

2021-07-12 15:11 更新

Pillow 使用插件模型,允許您將自己的解碼器添加到庫(kù)中,而無需對(duì)庫(kù)本身進(jìn)行任何更改。此類插件通常有這樣的名稱? XxxImagePlugin.py?,其中?Xxx?是唯一的格式名稱(通常是縮寫)。

Pillow >=2.1.0不再以? ImagePlugin.py?名稱自動(dòng)導(dǎo)入python路徑中。您需要手動(dòng)導(dǎo)入圖像插件。

Pillow分兩個(gè)階段解碼文件:

  1. 它以加載的順序遍歷可用的圖像插件,并?_accept?使用文件的前 16 個(gè)字節(jié)調(diào)用插件的函數(shù)。如果?_accept?函數(shù)返回 ?true?,則調(diào)用插件的?_open? 方法來設(shè)置圖像元數(shù)據(jù)和圖像圖塊。該?_open?方法不用于解碼實(shí)際圖像數(shù)據(jù)。
  2. 當(dāng)請(qǐng)求圖像數(shù)據(jù)時(shí),該?ImageFile.load?方法被調(diào)用,該方法為每個(gè)圖塊設(shè)置一個(gè)解碼器并將數(shù)據(jù)提供給它。

圖像插件應(yīng)包含從?PIL.ImageFile.ImageFile?基類派生的格式處理程序 。這個(gè)類應(yīng)該提供一個(gè)_open方法,它讀取文件頭并至少設(shè)置?mode?和 size屬性。為了能夠加載文件,該方法還必須創(chuàng)建一個(gè)tile描述符列表,其中包含解碼器名稱、圖塊的范圍和任何特定于解碼器的數(shù)據(jù)。格式處理程序類必須通過調(diào)用Image模塊顯式注冊(cè)。

出于性能原因, ?_open ?方法必須快速拒絕沒有適當(dāng)內(nèi)容的文件。

例子

下面的插件支持一個(gè)簡(jiǎn)單的格式,它有一個(gè)128字節(jié)的標(biāo)題,由單詞“SPAM”組成,后跟寬度、高度和像素大?。ㄒ晕粸閱挝唬?。標(biāo)題字段用空格隔開。圖像數(shù)據(jù)緊跟在標(biāo)題之后,可以是二級(jí)、灰度或24位真彩色。

spamimageplugin.py

from PIL import Image, ImageFile


def _accept(prefix):
    return prefix[:4] == b"SPAM"


class SpamImageFile(ImageFile.ImageFile):

    format = "SPAM"
    format_description = "Spam raster image"

    def _open(self):

        header = self.fp.read(128).split()

        # size in pixels (width, height)
        self._size = int(header[1]), int(header[2])

        # mode setting
        bits = int(header[3])
        if bits == 1:
            self.mode = "1"
        elif bits == 8:
            self.mode = "L"
        elif bits == 24:
            self.mode = "RGB"
        else:
            raise SyntaxError("unknown number of bits")

        # data descriptor
        self.tile = [("raw", (0, 0) + self.size, 128, (self.mode, 0, 1))]


Image.register_open(SpamImageFile.format, SpamImageFile, _accept)

Image.register_extensions(SpamImageFile.format, [
    ".spam",
    ".spa",  # DOS version
])

格式處理程序必須始終設(shè)置 ?size ?和 ?mode ?屬性。如果未設(shè)置,則無法打開文件。為了簡(jiǎn)化插件,調(diào)用代碼考慮異常,例如  ?SyntaxError ?, ?KeyError? , ?IndexError ?, ?EOFError ?和 ? struct.error? 無法識(shí)別文件。

請(qǐng)注意,必須使用? PIL.Image.register_open() ?. 盡管不是必需的,但最好注冊(cè)此格式使用的任何擴(kuò)展名。

導(dǎo)入插件后,就可以使用了:

from PIL import Image
import SpamImagePlugin
with Image.open("hopper.spam") as im:
    pass

這個(gè)?tile? 屬性

為了能夠讀取該文件以及識(shí)別它, ?tile?還必須設(shè)置屬性。這個(gè)屬性包含一個(gè)平鋪描述符列表,其中每個(gè)描述符指定如何將數(shù)據(jù)加載到圖像中的給定區(qū)域。在大多數(shù)情況下,只使用一個(gè)描述符,覆蓋整個(gè)圖像。

tile描述符是一個(gè)包含以下內(nèi)容的4元組:

(decoder, region, offset, parameters)

字段使用如下:

  • ?decoder ?  指定要使用的解碼器。這個(gè) ?raw ?這里使用的解碼器支持各種像素格式的未壓縮數(shù)據(jù)。有關(guān)此解碼器的詳細(xì)信息,請(qǐng)參閱下面的說明。
  • ?region ?  一個(gè)4元組,指定在映像中存儲(chǔ)數(shù)據(jù)的位置。
  • ?offset ?  從文件開頭到圖像數(shù)據(jù)的字節(jié)偏移量。
  • ?parameters ?  解碼器的參數(shù)。此字段的內(nèi)容取決于平鋪描述符元組中第一個(gè)字段指定的解碼器。如果解碼器不需要任何參數(shù),請(qǐng)用?None?于此字段。

請(qǐng)注意 ?tile ?屬性包含一個(gè)平鋪描述符列表,而不僅僅是一個(gè)描述符。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)