質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

548閲覧

Python PIL で特異な楕円を書く

vibrato

総合スコア52

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/12/15 16:26

http://kyle-in-jp.blogspot.jp/2008/11/python-imaging-library_607.html
このページを参考に画像を楕円に切り取る方法を方法を学んだのですが、
実際に望んでいる形は**「四つ角をドッグイヤーした程度の楕円状」**に切り抜きたいのです。
正しく言うと楕円ではなくなってしまうのですが、そのような形に切り抜きたいと考えています。
以下のコードをどのように編集すれば、
**「四つ角をドッグイヤーした程度の楕円状」**にすることが可能でしょうか?
ご教授のほど宜しくお願い致します。

###貼り付けたURLのコードのコピペ(楕円に切り抜くことが出来る)

python

1# coding=UTF-8 2import Image 3import ImageFilter 4import ImageDraw 5 6# 半透明円の切り取りをする 7img1 = Image.open("sf.jpg") 8img2 = Image.new("RGBA", img1.size, "#000000") 9mask = Image.new("L", img1.size, 1) 10draw = ImageDraw.Draw(mask) 11draw.ellipse((10,10,img1.size[0]-11,img1.size[1]-11), fill="#ffffff") 12del draw 13mask = mask.filter(ImageFilter.BLUR) 14img2.paste(img1, (0,0)) 15img2.putalpha(mask) 16# PNGで保存 17img2.save("sample650a.png") 18# 白背景と合成してjpegで保存 19img3 = Image.new("RGB", img1.size, "#ffffff") 20img3.paste(img2, mask=img2) 21img3.save("sample650b.jpg") 22

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

前の質問と内容が近いですね。どの程度角を取るのか分かりませんので、ペイントなんかでさっと作った画像があるとよいと思います。とりあえず角の取れた四角のつくり方です。


  1. マスク画像を作る
  • 基礎となる四角を作る
  • 丸を角に被せる
  • 他の角にも適用する

こちらのPILチュートリアルまんまですが、
イメージ説明

Python

1def round_corner(radius, fill): 2 """Draw a round corner""" 3 corner = Image.new('RGBA', (radius, radius), (0, 0, 0, 0)) 4 draw = ImageDraw.Draw(corner) 5 draw.pieslice((0, 0, radius * 2, radius * 2), 180, 270, fill=fill) 6 return corner 7 8def round_rectangle(size, radius, fill): 9 """Draw a rounded rectangle""" 10 width, height = size 11 rectangle = Image.new('RGBA', size, fill) 12 corner = round_corner(radius, fill) 13 rectangle.paste(corner, (0, 0)) 14 rectangle.paste(corner.rotate(90), (0, height - radius)) # Rotate the corner and paste it 15 rectangle.paste(corner.rotate(180), (width - radius, height - radius)) 16 rectangle.paste(corner.rotate(270), (width - radius, 0)) 17 return rectangle 18 19img = round_rectangle((50, 50), 10, "yellow")

2.マスク画像でくりぬく
こっちもまんまですがcomposite関数で行けますね。白黒画像のマスクを使って繰り抜けますね。
イメージ説明

Python

1from PIL import Image 2# 3img1 = Image.open('data/srcimg01.jpg') 4img2 = Image.open('data/srcimg02.jpg').resize(img1.size) 5mask = Image.open('data/mask_circle_01.jpg') 6mask = mask.resize(img1.size) 7# 8Image.composite(img1, img2, mask).save( 9 "result/Image_composite_02.jpg")

投稿2017/12/15 23:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問