Pillow 介紹,基本命令,putpixel操作 實現隨即色的圖片

目錄:

  1. pillow的介紹和基本命令
  2. putpixel操作 實現隨即色的圖片


  • Python lmaging Library(PIL)是 python 下的圖像處理模塊,支持多種格式,並提供了強大的圖像處理功能,可以通過 pip 進行安裝。

  • PIL 模塊的官方版本只支持 Python2,pillow 完美支持 Python3

pillow

Pillow 是 PIL 的一個派生分支,但如今已經發展成爲比 PIL 本身更具活力的圖像處理庫。pillow 可以說已經取代了 PIL,將其封裝成python的庫(pip即可安裝),且支持 python2 和 python3

Pillow的Github主頁:https://github.com/python-pillow/Pillow 

Pillow的文檔(對應版本v3.0.0): 

https://pillow.readthedocs.org/en/latest/handbook/index.html

基本操作

# 下載安裝
pip install pillow

# python2 
import Image
 
# python3(因爲是派生的PIL庫,所以要導入PIL中的Image) 
from PIL import Image

# 打開圖像文件
im = Image.open('sample.jpg')

# 顯示圖像
im.show()

查看圖像信息


# 查看圖像的信息
print(im.format)

print(im.size)   # 大小

# 查看圖像直方圖,圖像如果是 RGB 則返回三組數,如果是灰度圖則 返回一組數
print(im.histogram())

灰度直方圖是關於灰度級分佈的函數,是對圖像中灰度級分佈的統計。灰度直方圖是將數字圖像中的所有像素,按照灰度值的大小,統計其出現的頻率。灰度直方圖是灰度級的函數,它表示圖像中具有某種灰度級的像素的個數,反映了圖像中某種灰度出現的頻率。

查看圖像 像素值

# 讀取圖片的像素值
print(im.getpixel((100, 50)))   # 100, 50 是指定圖片的位置的顏色 像素值

# 如果說彩色圖像 那麼返回的就是一個元組
(124, 126, 123)   # 紅綠藍 顏色的三個分量

# 如果是 灰度圖像那麼返回的就是一個數值
87

# 設置像素值
im.putpixel((100, 50), (128, 30, 120))    # 設置該圖片指定位置的 RGB 顏色值

# 如果是灰度圖像 那麼只需要設置一個值

圖像保存


# 保存圖像文件
im.save('新名字.jpg')

# 轉換圖像格式
im.save('名字.你改的格式')

圖像的樣式轉換

# 圖像縮放
im_1 = im.resize((100, 100))     # 返回的是新圖像,我們需要保存下來


# 逆時針旋轉圖像,rotate 方法支持任意角度的旋轉,
# 而transpose方法支持部份特殊角度的旋轉,如 90、180、270以及水平、垂直翻轉

im_2 = im.rotate(90)     # l < 0 < r

im_3 = im.transpose(Image.ROTATE_180)

im_3 = im.transpose(Image.FLIP_LEFT_RIGHT)   # 左右水平 旋轉

im_3 = im.transpose(Image.FLIP_TOP_BOTTOm)   # 上下水平 翻轉

圖像的裁剪與粘貼

from PIL import Image
im = Image.open('sample.jpg')


box = (120, 194, 220, 294)

# 在原圖片將 box 區域裁剪下來
region = im.crop(box)      # region也是 img 對象哦,所以就可以使用 圖像對象的所有方法 ↓ 例

# 將裁剪下來的圖片 翻轉180 (倒過來了)
region = region.transpose(Image_ROTATE_180)

# 原圖片粘貼: 翻轉後的圖片 粘貼到 原圖片的 box 區域上    注: 這裏是粘貼,不是修補
im.paste(region, box)

im.show()



putpixel 實現隨即色的圖片

我們先用畫圖(mspaint) 生成 一個白板,當然 Pillow也可以生成 我們後期再說。
在這裏插入圖片描述
這麼大的就行,然後保存 命名爲 test.bmp 圖像

在這裏插入圖片描述
開工

from PIL import Image
from random import randint

img = Image.open('test.bmp')
 
for w in range(200, 280):    # 這裏是設置圖形的寬度 範圍
	for h in range(100 ,200):   # 這裏是設置圖形高度 範圍
		r = randint(0, 255)    # 取值 0-255 隨機數的值 作爲顏色值
		g = randint(0, 255)
		b = randint(0, 255)
		img.putpixel((w, h), (r, g, b))   # 設置指定範圍的顏色值

img.show()

結果
在這裏插入圖片描述接下來又有了新的需求,我們需要把 這個 圖像 右移 200px,且圖像一致。都是隨機生成的,像還原一個是基本不可能了。

思路解析:

  • 將 源圖像的所有像素值 獲取出來,getpixel
  • 獲取到的像素值和位置,寫到右面200px,putpixel
# 可以將 ↑ 的代碼拿下來改改

for w in range(200, 280):
	for h in range(100, 200):
		color = img.getpixel((w, h))
		img.putpixel((w + 200, h), color)

img.show()

結果
在這裏插入圖片描述



我們查看 Image 的底層源碼,發現他可以支持這麼多的 圖像格式。

# 373
def preinit():
    """Explicitly load standard file format drivers."""

    global _initialized
    if _initialized >= 1:
        return

    try:
        from . import BmpImagePlugin
        assert BmpImagePlugin
    except ImportError:
        pass
    try:
        from . import GifImagePlugin
        assert GifImagePlugin
    except ImportError:
        pass
    try:
        from . import JpegImagePlugin
        assert JpegImagePlugin
    except ImportError:
        pass
    try:
        from . import PpmImagePlugin
        assert PpmImagePlugin
    except ImportError:
        pass
    try:
        from . import PngImagePlugin
        assert PngImagePlugin
    except ImportError:
        pass
#   try:
#       import TiffImagePlugin
#       assert TiffImagePlugin
#   except ImportError:
#       pass

    _initialized = 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章