ピロウズ画像色処理の具体的な活用方法
Pillowは色処理モジュールImageColorを提供しており、RGB形式の色トリプル、16進数の色名(#ff0000)、英語の色単語("red")など、さまざまな形式の色をサポートしています。また、CSS(Cascading Style Sheets、ウェブページを修正するために使用)形式の色をRGB形式に変換することも可能です。
なお、ImageColor モジュールでは、色の大きさは考慮されません。例えば、"Red" は " red" と書くこともできます。
カラーネーミング
ImageColorは、おなじみのRGBカラーモードのほか、HSL(色相-飽和-明度)、HSB(HSV、色相-飽和-明度とも)カラーモードなど、ネーミング(値を一定のフォーマットで表すこと)のためのさまざまなカラーモードに対応しています。以下、HSLについて簡単に説明します。
- H:色相(Hue)。値の範囲は0〜360で、0は"red"、120は"green"、240は"blue"を意味する。
- S:彩度。色の純度を表し、0~100%の値をとる。0はグレー(gry)、100%は最も彩度の高い色の光を表す。
- L: Lightness(明度)色の明るさを表し、0~100%の値をとります。0は"black"黒、50%は通常の色、100%は白を意味します。
<スパン 以下、HSLカラーモードを使って赤を表現すると、以下のような形式になります。
HSL(0,100%,50%)
この時の色は"pure red"で、RGB(255,0,0)に相当する色です。HSL/HSBについてもっと詳しく知りたい方は、リンクをクリックして行ってみてください。
ImageColorモジュールは比較的シンプルで、getrgb()とgetcolor()という2つの共通メソッドを提供するだけです。
getrgb() メソッド
この関数はその名の通り、色のRGB値を取得するためのもので、以下のような構文形式になっています。
PIL.ImageColor.getrgb(color)
使用例は以下の通りです。
from PIL import Image,ImageColor
# getrgb() method
color1=ImageColor.getrgb("blue")
print(color1)
color2=ImageColor.getrgb('#DCDCDC')
print(color2)
# Use HSL mode red
color3=ImageColor.getrgb('HSL(0,100%,50%)')
print(color3)
出力は次のようになります。
(0, 0, 255)
(220, 220, 220)
(255, 0, 0)
new()メソッドで新規に画像を作成することができますが、このとき、以下のようにImageColor.getrgb()も使用することが可能です。
# Use new() to draw a new image
im= Image.new("RGB", (200, 200), ImageColor.getrgb("#EEB4B4"))
im.save("C:/Users/Administrator/Desktop/xin.jpg")
以下のように画像を表示します。
図1:新しい画像
getcolor()
このメソッドも色値を取得するために使用されるという点では getrgb() と同様ですが、この関数が指定されたカラーモードの色値を取得できるように、mode パラメータが追加されていることが特徴です。構文形式は次のとおりです。
PIL.ImageColor.getcolor(color, mode)
パラメータは以下のように記述されています。
- color: 色名。文字列形式で、色を表す英語か、16進数の色名です。サポートされていない色の場合、ValueErrorエラーが報告される。
- mode: カラーモードを指定する。未対応のモードである場合、KeyErrorエラーが報告される。
使用例としては、以下のようになります。
color4=ImageColor.getcolor('#EEA9B8','L')
print(color4)
color5=ImageColor.getcolor('yellow','RGBA')
print(color5)
出力結果です。
191
(255, 255, 0, 255)
例)証明写真の背景色を変更する場合
import PIL.Image as Image
# ============1. Open image ============
img = Image.open('1.jpg')
#============2. Process the image ============
# Divide the image into small squares
img_array = img.load()
#traverse each pixel block and process the color
width, height = img.size#Get width and height
for x in range(0,width):
for y in range(0,height):
rgb = img_array[x,y]#Get the rgb of a pixel block
r = rgb[0]
g = rgb[1]
b = rgb[2]
if b>130 and r<120:#judge the rule
img_array[x, y] = (255, 0, 0)
# ============3. Save the image ============
img.save("2.jpg")
Pillowの画像色処理の具体的な使用方法については、以上とさせていただきます。Pillowの画像カラーコンテンツについては、スクリプトハウスの過去記事を検索していただくか、引き続き以下の関連記事をご覧ください。
関連
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
Pythonを用いたMUIエリアスクロール機能
-
[解決済み】PythonのJSONでDecimalオブジェクトをシリアライズする
-
[解決済み] 連鎖比較の簡略化
-
[解決済み] パイソン 複数の関数を同時に実行する
-
[解決済み] seaborn FacetGridでフォントサイズを変更するには?
-
[解決済み] Celery 登録されていないタイプのタスクを受信した(実行例)
-
python reshape() function ValueError: 新しい配列の合計サイズは変更しない必要があります。
-
pipインストールエラーの解決 TypeError: -= でサポートされていないオペランドタイプ: 'Retry' および 'int'.
-
python3 プログラミングエラー [1]: ValueError: 解凍する値が足りない (期待値 2、取得値 1)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: method()は1つの位置引数を取るが、2つが与えられている
-
[解決済み】Flask Value error ビュー関数が応答を返さなかった [重複]。
-
[解決済み】pythonで添え字を印刷する
-
python-numpy: linalg.solve Singular Matrixでのエラー
-
[解決済み] TypeError: 引数に複数の値が指定されました。
-
[解決済み] Python: インスタンスに属性がない
-
[解決済み] Pythonを使用してWebブラウザを閉じる方法
-
[解決済み] エラー "TypeError: type numpy.ndarray doesn't define __round__ method"
-
[解決済み] Django テンプレートで辞書要素にアクセスする方法は?
-
[解決済み] ImportError: sqlalchemy という名前のモジュールがありません。