Python PILを使用して画像の非長方形または円形の領域をぼかす方法は?

コオロギ

PythonでPILを使用して、PNG画像を別の大きな画像の上に重ね合わせています。小さい方の画像は半透明です。

小さい画像の後ろの領域を大きい画像でぼやけさせたいのですが。次のコードは、長方形の領域をぼかします。

box = (3270, 1150, 4030, 2250)      # (x1, y1, x2, y2)
ic = outputImage.crop(box)
ic = ic.filter(ImageFilter.BoxBlur(20))
outputImage.paste(ic, box)

ただし、角が丸い長方形の領域をぼかす必要があります。

重ね合わせた画像は次のようになります。

では、PILでトリミングされた領域のカスタム形状を定義することは可能ですか?

そうでない場合、少なくとも円形の領域をトリミングすることは可能ですか?(完全にカバーし、オーバーハングがない場合、私の領域は6つのサブ領域(4つの円と2つの長方形)に分割する必要があります。これをすべて行うとコードの速度が低下しますが、可能な限りの解決策を取ります。)

これはNumpy実行できることを理解していますが、このスクリプトの他のすべてはすでにPILでコーディングされているため、PILを使用することをお勧めします。

アンドリー・マクカ

この例を見てください(ここからrounded_rectangle関数):

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFilter

def rounded_rectangle(draw, xy, rad, fill=None):
    x0, y0, x1, y1 = xy
    draw.rectangle([ (x0, y0 + rad), (x1, y1 - rad) ], fill=fill)
    draw.rectangle([ (x0 + rad, y0), (x1 - rad, y1) ], fill=fill)
    draw.pieslice([ (x0, y0), (x0 + rad * 2, y0 + rad * 2) ], 180, 270, fill=fill)
    draw.pieslice([ (x1 - rad * 2, y1 - rad * 2), (x1, y1) ], 0, 90, fill=fill)
    draw.pieslice([ (x0, y1 - rad * 2), (x0 + rad * 2, y1) ], 90, 180, fill=fill)
    draw.pieslice([ (x1 - rad * 2, y0), (x1, y0 + rad * 2) ], 270, 360, fill=fill)

# Open an image
im = Image.open(INPUT_IMAGE_FILENAME)

# Create rounded rectangle mask
mask = Image.new('L', im.size, 0)
draw = ImageDraw.Draw(mask)
rounded_rectangle(draw, (im.size[0]//4, im.size[1]//4, im.size[0]//4*3, im.size[1]//4*3), rad=40, fill=255)
mask.save('mask.png')

# Blur image
blurred = im.filter(ImageFilter.GaussianBlur(20))

# Paste blurred region and save result
im.paste(blurred, mask=mask)
im.save(OUTPUT_IMAGE_FILENAME)

入力画像:

ビーチでのコーラ缶(ウクライナ)

マスク:

黒の背景に丸い角を持つ白い長方形

出力画像:

ビーチでぼやけたコーラ缶

Python2.7.12およびPillow3.1.2でテスト済み(BoxBlurはありません)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

TOP 一覧

  1. 1

    sql-ORA-00937:単一グループのグループ関数ではありません

  2. 2

    Powershellを使用して管理者として実行ショートカットを作成する方法

  3. 3

    GolangがHTTPリクエストFormFileをAmazon S3にアップロードする

  4. 4

    AWS S3 SDK-スレッドプールサイズを設定するにはどうすればよいですか?

  5. 5

    Reactでclsxを使用する方法

  6. 6

    Ansibleで複数行のシェルスクリプトを実行する方法

  7. 7

    SwiftでURLが有効かどうかを確認するにはどうすればよいですか?

  8. 8

    DatabaseError:ORA-00928:SELECTキーワードがありません

  9. 9

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  10. 10

    Azure Logic Apps:PowershellスクリプトまたはAzure CLIを実行する方法は?

  11. 11

    Eclipseをアンインストールする方法?

  12. 12

    React:Rootクラスの条件付きレンダリングが機能しませんでした

  13. 13

    レンダリング後のdivの動的幅の取得

  14. 14

    Microsoft Edge WebブラウザでJavaを有効にするにはどうすればよいですか?

  15. 15

    TestInitメソッドでHttpContext.Currentをモックします

  16. 16

    SeleniumとPythonを使用してdiv内の値を見つける方法

  17. 17

    シェープファイルからTopojsonへの変換

  18. 18

    std :: binary_functionの置き換え

  19. 19

    Open Weather Map APIによって提供されるJSON天気予報を明確にする方法は?

  20. 20

    マルチレベルのグループ化でHTMLテーブルにデータを表示する

  21. 21

    「java.library.pathにocijdbc11がありません」SQLDeveloperエラーの対処方法

ホットタグ

アーカイブ