用PIL載入png圖片的問題

來源:互聯網
上載者:User

    工作中需要對一幅PNG的16位灰階圖片進行處理,因為用於處理的程式很多天以前用Python和PIL寫好了,只不過有些參數因為時間太久記不清了。連蒙帶猜的湊齊了參數,運行時卻發現,運行過程中讀png檔案並複製的時候總是報錯。找了一下,很快發現原來是檔案格式不太合適,用的是16位灰階圖,趕快到PIL的文檔裡面去查,這一查心裡涼了半截,文檔裡面所說的PIL支援的檔案格式和類型沒有16位的,而且也沒有合適的可以轉換的格式:

    摘自“Python Imaging Library Overview,PIL1.1.3”

    正在著急的時候,忽然想起PIL也是開源的,趕緊到安裝目錄下看看。很快在裡面找到了png檔案的解析代碼(PngImagePlugin.py),裡面關於檔案格式的定義比文檔裡可豐富多了:
_MODES = {
    # supported bits/color combinations, and corresponding modes/rawmodes
    (1, 0): ("1", "1"),
    (2, 0): ("L", "L;2"),
    (4, 0): ("L", "L;4"),
    (8, 0): ("L", "L"),
    (16,0): ("I", "I;16B"),
    (8, 2): ("RGB", "RGB"),
    (16,2): ("RGB", "RGB;16B"),
    (1, 3): ("P", "P;1"),
    (2, 3): ("P", "P;2"),
    (4, 3): ("P", "P;4"),
    (8, 3): ("P", "P"),
    (8, 4): ("LA", "LA"),
    (16,4): ("RGBA", "LA;16B"), # LA;16B->LA not yet available
    (8, 6): ("RGBA", "RGBA"),
    (16,6): ("RGBA", "RGBA;16B"),
}
不光有16位灰階圖的支援,還可以支援RGB16位的映像,估計連作HDR都夠了,哈哈。用的時候也非常簡單,讀取檔案是可以自動識別的,而在建立檔案時,只要聲明其模式(mode)為"I;16B"即可。

還有一點需要小心,PIL所處理的16位灰階圖中,映像資料必須要作為圖片的背景,而不是其它的圖層來儲存,否則PIL會將該圖以RGB8的格式讀取和處理。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.