PILを使用して画像をトリミングする方法


134

与えられた画像から最初の30行と最後の30行を削除する方法で画像をトリミングしたいと思います。私は検索しましたが、正確な解決策を得られませんでした。誰かが何か提案がありますか?

回答:


196

crop()メソッドがあります:

w, h = yourImage.size
yourImage.crop((0, 30, w, h-30)).save(...)

1
はい、im.crop(box)が画像のトリミングに使用されていることを知っています。しかし、box()は4つのタプルを取りますが、画像の上下ではなく、画像の上部と下部のみをトリミングしたいのですが、画像の上部と下部をトリミングする方法がわかりません。
Taj Koyal

4
@TajKoyal:ninjageckoが正確に示しているのは、上下を切り取る方法です。彼は新しい画像に長方形を指定しています。上の点と下の点のy値から30ピクセルを削っていることがわかります。何らかの方法でx値をオフセットすると、それは左側と右側に影響します。
jdi

1
助けてくれてありがとう。
タージコヤル

7
私のように怠惰な人のためにParameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
リシャフ2018

52

これには、PIL(枕)をインポートする必要があります。サイズが1200、1600の画像があるとします。400、400から800、800までの画像をトリミングします

from PIL import Image
img = Image.open("ImageName.jpg")
area = (400, 400, 800, 800)
cropped_img = img.crop(area)
cropped_img.show()

20

(左、上、右、下)は2つのポイントを意味し、

  1. (左、上)
  2. (右、下)

800x600ピクセルの画像の場合、画像の左上の点は(0、0)、右下の点は(800、600)です。

したがって、画像を半分にカットする場合:

from PIL import Image
img = Image.open("ImageName.jpg")

img_left_area = (0, 0, 400, 600)
img_right_area = (400, 0, 800, 600)

img_left = img.crop(img_left_area)
img_right = img.crop(img_right_area)

img_left.show()
img_right.show()

ここに画像の説明を入力してください

座標系

Python Imaging Libraryは、左上隅が(0,0)のデカルトピクセル座標系を使用します。座標は暗黙のピクセルコーナーを参照することに注意してください。(0、0)としてアドレス指定されたピクセルの中心は、実際には(0.5、0.5)にあります。

座標は通常、2タプル(x、y)としてライブラリに渡されます。四角形は、左上隅が最初に指定された4タプルとして表されます。たとえば、800x600ピクセルの画像をすべてカバーする長方形は(0、0、800、600)と記述されます。


13

これを行う簡単な方法は、ImageOpsのトリミングを使用することです。切り取るピクセル数を両側からフィードできます。

from PIL import ImageOps

border = (0, 30, 0, 30) # left, up, right, bottom
ImageOps.crop(img, border)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.