Python Pillow(PIL)ライブラリの使用法の概要

Python Pillow(PIL)ライブラリの使用法の概要

Pillowライブラリは、Python用のサードパーティライブラリです。

Python2では、PIL(Python Imaging Library)は非常に便利な画像処理ライブラリですが、PILはPython3をサポートしていないため、一部の人々(Alex ClarkとContributors)はPython3で使用できるPillowを提供しました。

公式ドキュメントパス:https//pillow.readthedocs.io/en/latest/

1つは、Pillowをインストールする

pip install pillow

Pillowライブラリが正常にインストールされたら、PILを使用してパッケージをインポートする必要がありますが、PillowまたはPillowは使用できません。

import PIL
from PIL import Image

Pillowライブラリでは、20を超えるモジュールに加えて、多くのプラグインもサポートしています。最も一般的に使用されるものの1つは、Imageモジュールで同じ名前のImageクラスです。他の多くのモジュールは、Imageモジュールに基づいて画像のさらに特別な処理を実行します。Imageモジュールは、使用するためにいくつかのパーツをインポートします。この記事では、Imageモジュールの一般的な方法を紹介します。

次に、ローカル画像を開きます

元の画像:

# coding=utf-8
from PIL import Image

image = Image.open("yazi.jpg")
image.show()

演算結果:

open(fp、mode = 'r'):画像モジュールの関数である画像を開きます。画像と現在のコードが同じディレクトリにある場合は、画像のファイル名のみを書き込むことができます。それ以外の場合は、スプライスされた画像のパスが必要です。モードのデフォルトは「r」であり、「r」でなければなりません。

show():画像表示ソフトウェアを呼び出して画像を開きます。開いた後、プログラムはブロックされ、手動で閉じる必要があります。

3、新しい画像を作成します

from PIL import Image


image = Image.new('RGB', (160, 90), (0, 0, 255))
image.show()

演算結果:

new(mode、size、color = 0):描画用の画像(キャンバス)を作成します。これはImageモジュールの関数です。3つのパラメータがあります。

モード、「RGB」(赤、緑、青の3原色の略、トゥルーカラー画像)、「L」(グレースケール、白黒画像)などの画像のモード。

サイズ、画像のサイズ。これは、ピクセルサイズを表す長さ2(幅、高さ)のタプルです。

color、画像の色。デフォルト値は0で、黒を意味します。色を表すために長さ3のタプルを渡すことも、色の16進数を渡すこともできます。バージョン1.1.4以降では、(0、 0、255)は、「#0000FF」または「blue」に置き換えることができます。どちらも青を意味します。

第四に、画像モジュールの共通の属性

from PIL import Image


image = Image.open("yazi.jpg")
print('width: ', image.width)
print('height: ', image.height)
print('size: ', image.size)
print('mode: ', image.mode)
print('format: ', image.format)
print('category: ', image.category)
print('readonly: ', image.readonly)
print('info: ', image.info)

演算結果:

width:  1557
height:  911
size:  (1557, 911)
mode:  RGBA
format:  PNG
category:  0
readonly:  1
info:  {'dpi': (120, 120), 'Software': 'Snipaste'}

width属性は画像のピクセル幅を表し、height属性は画像のピクセル高さを表し、widthとheightはsize属性を形成し、sizeはタプルです。

mode属性は、RGBA、RGB、P、Lなどの画像のモードを示します。

format属性は画像のフォーマットを示し、フォーマットは通常、画像の接尾辞拡張子に関連しています。category属性は、画像のカテゴリを示します。

readonly属性は、イメージが読み取り専用であるかどうかを示し、値は1または0であり、ブール値を示します。

info属性は画像の情報を表し、辞書です。

5、画像モードとモード変換

1.画像モード

画像には多くのモードがあり、次の標準モードがサポートされています。https//pillow.readthedocs.io/en/latest/handbook/concepts.html#concept-modesを参照してください。

モード 説明
1 1ビットピクセル、白黒、各バイトは1ピクセルを格納します
L 8ビットピクセル、白黒
P  8ビットピクセル、パレットを使用して他のモードにマップ
RGB  3x8ビットピクセル、トゥルーカラー
RGBA  4x8ビットピクセル、透明マスク付きトゥルーカラー
CMYK  4x8ビットピクセル、色分解
YCbCr  3x8ビットピクセル、カラービデオフォーマット
LAB  3x8ビットピクセル、L * a * b色空間
HSV  3x8ビットピクセル、色相、彩度、値の色空間
I  32ビット符号付き整数ピクセル
F  32ビット浮動小数点ピクセル

1ビットピクセルの範囲は0〜1、0は黒、1は白、中央は灰色を意味します。8ビットピクセルの範囲は0〜255です。たとえば、RGB(0、0、0)は黒を意味し、(255、255、255)は白を意味します。

2.画像​​モード変換

from PIL import Image


image = Image.open("yazi.jpg")
print(image.mode)
image1 = image.convert('1')
print(image1.mode)
# image1.show()
image_l = image.convert('L')
print(image_l.mode)
# image_l.show()
image_p = image.convert('P')
print(image_p.mode)
image_p.show()

演算結果:

RGBA
1
L
P

convert(self、mode = None、matrix = None、dither = None、palet = WEB、colors = 256):画像を指定されたモードに変換し、変換された画像のコピーを返します。モードを指定しない場合、画像のすべての情報を保持し、パレットを使用しないモードが自動的に選択されます(通常の結果は変換されません)。カラー画像をグレースケール(「L」)に変換する場合は、輝度変換にITU-R 601-2を使用します:L = R * 299/1000 + G * 587/1000 + B * 114/1000。グレースケール(「L」)またはトゥルーカラー(「RGB」)をモード「1」に変換するときに、ディザパラメーターが「NONE」の場合、128より大きいすべての値は255(白)に設定され、他のすべての値は設定されています0(黒)です。

convert()メソッドには5つのパラメーターがあります。

画像のモードであるmodeは、変換が必要なモードを渡します。一部のモードは変換をサポートしておらず、コードはエラーを報告します。

マトリックス、変換マトリックス。このパラメーターを渡すときは、浮動小数点数で構成されるタプルを渡す必要があります。タプルの長さは4または12です。Matrixは、いくつかのモードから「L」または「RGB」への変換のみをサポートします。

ディザ、高周波振動、色のディザリングを制御するために使用されます。モード「RGB」から「P」または「RGB」または「L」から「1」に変換するときに使用されます。使用可能なメソッドは「NONE」または「FLOYDSTEINBERG」(デフォルト)です。この関数は、行列パラメーターが指定されている場合は使用されません。

パレット、パレット、パレットの生成を制御するために使用されます。モード「RGB」から「P」に変換するときに使用されます。使用可能なメソッドは「WEB」(デフォルト)または「ADAPTIVE」です。「アダプティブ」とは、アダプティブカラーパレットを使用することを意味します。

色、アダプティブパレットで使用される色の数。パレットパラメータが「ADAPTIVE」の場合、パレットの色数を制御するために使用されます。デフォルトは最大値で、256色です。

2.1行列パラメータの効果の比較

from PIL import Image


image = Image.open("yazi.jpg")
image_rgb = image.convert('RGB')
print(image_rgb.mode)
image_l = image_rgb.convert('L')
image_l.show()
matrix = (0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6)
image_l2 = image_rgb.convert('L', matrix=matrix)
image_l2.show()

演算結果:

上記のコードでは、長さ12のタプルが行列パラメーターに渡されます。行列の値は、変換の効果を変更します。変更の程度は、渡されたタプルの浮動小数点数の値によって異なります。「RGBA」などの一部のモードはサポートされておらず、着信タプルの長さは4または12でなければならないことに注意してください。そうでない場合、エラーが報告されます。

2.2パレットパラメータの効果比較

from PIL import Image


image = Image.open("yazi.jpg")
image_p = image.convert('P')
# image_l.show()
image_p2 = image.convert('P', palette='ADAPTIVE', colors=256)
image_p2.show()

演算結果:

上記のコードでは、パレットパラメータが「ADAPTIVE」に変更されており、画像の違いは大きくありませんが、色を小さくすると違いは大きくなりますが、画像の効果が悪くなります。

6.写真をコピー、貼り付け、保存します

from PIL import Image


image = Image.open("yazi.jpg")
image_copy = image.copy()
# image_copy.show()
image_new = Image.new('RGB', (160, 90), (0, 0, 255))
image_new2 = Image.new('L', (160, 90), '#646464')
image_copy.paste(image_new, (100, 100, 260, 190), mask=image_new2)
image_copy.save('duck.png')
image_save = Image.open('duck.png')
print(image_save.format, image_save.mode)
image_copy.show()

演算結果:

PNG RGBA

copy():現在の画像をコピーします。コピーされた画像は元の画像とまったく同じです。画像にコンテンツを貼り付けたいが、元の画像を保持したい場合は、この方法を使用できます。

paste(im、box = None、mask = None):現在の画像に別の画像を貼り付けます。貼り付けたパターンが一致しない場合、貼り付けた画像のパターンが現在の画像のパターンに変換されます。3つのパラメータがあります。

im、貼り付ける画像。画像を渡します。2番目のパラメータボックスで領域を指定する場合、imパラメータは整数または色の値にすることもできます(上記のコードのimage_newのように、タプル表現、16進表現、色名を使用できます。これは置き換えることができます。 (0、0、255)、 '#0000FF'、 'blue')によって。

ボックス、画像が貼り付けられる場所または領域。2または4の長さのタプルを渡します。値が渡されない場合、デフォルトは(0、0)であり、画像は現在の画像の左上隅に貼り付けられます。長さ2のタプル(x、y)が渡されると、貼り付けられた画像の左上隅の座標位置を示します。長さ4(x0、y0、x1、y1)のタプルが渡された場合、それは画像が貼り付けられる領域を示します。このとき、領域のサイズは貼り付けられる画像と同じである必要があります。エラーが報告され、渡されたタプルの長さは別の値ですエラーも報告されます。

マスク、マスク。貼り付けた画像と同じサイズの画像を渡すと、「1」、「L」、「RGBA」のモードの画像を使用できます。マスク画像の色の値が255の場合、貼り付けた画像の色に応じて直接貼り付けられます。マスク画像の色の値が0の場合、現在の画像の色が保持されます(貼り付けなしと同等)。 、マスク画像の色の値が0の場合〜255の間の値の場合、貼り付ける前にimとマスクを混合します。

save(fp、format = None、** params):現在の画像を指定したファイル名で保存します。実行後、画像は現在のパスの下に新しい名前で保存されます(パスを指定することもできます)。ファイル名は、開くのに便利な拡張子を付けるのが最適です。形式は画像の形式を示します。形式が指定されていない場合は、拡張子に従って解析されます(解析できる場合)。通常、形式を指定する必要はありません。拡張子が付いたファイル名を渡します。できます。

セブン、画像のトリミングとズーム

from PIL import Image


image = Image.open("yazi.jpg")
image_crop = image.crop(box=(300, 300, 800, 700))
# image_crop.show()
print('before resize: ', image.size)
image_resize = image.resize((500, 400), resample=Image.LANCZOS, box=(100, 100, 1200, 800), reducing_gap=5.0)
print('after resize: ', image_resize.size)
image_resize.show()

演算結果:

before resize:  (1557, 911)
after resize:  (500, 400)

Crop(box = None):画像をトリミングし、トリミングされた領域に画像を返します。ボックスはトリミングされた領域を表します。長さ4(x0、y0、x1、y1)のタプルを渡します。渡さない場合、デフォルトでは元の画像がコピーされます。これはcopy()メソッドと同等です。トリミングされた領域が元の画像の領域を超える場合、余分な部分はピクセルグリッドで埋められます。

resize(size、resample = BICUBIC、box = None、reducing_gap = None):画像のサイズを変更し、ズームした画像のコピーを返します。4つのパラメータがあります。

サイズ、ズーム後の画像のサイズ、および長さ2(幅、高さ)のタプルが渡されます。

resample、resamplingは、オプションのリサンプリングフィルターです。Image.NEAREST、Image.BOX、Image.BILINEAR、Image.HAMMING、Image.BICUBIC、Image.LANCZOSを渡すことができます。デフォルトはImage.BICUBICです。画像のモードが「1」または「P」の場合、常にImage.NEARESTに設定されます。

ボックス、画像の領域をズームします。長さ4のタプル(x0、y0、x1、y1)を渡します。この領域は、元の画像の(0、0、幅、高さ)の範囲内にある必要があります。範囲を超えると、エラーが発生します。値が渡されない場合、デフォルトは整数になります。元の画像がズームされます。

reduce_gap、ギャップを減らします。浮動小数点数を渡して、画像のズーム効果を最適化します。デフォルトでは、最適化は実行されません。値が3.0より大きい場合、最適化効果は基本的に公正なリサンプリングです。

画像モジュールには、画像処理のための多くのメソッドと関数もあります。詳細については、https//blog.csdn.net/weixin_43790276/article/details/108673454を参照してください。

 

 

おすすめ

転載: blog.csdn.net/weixin_43790276/article/details/108478270