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
도와 주셔서 감사합니다.
Taj Koyal

7
나처럼 게으른 사람을 위해Parameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
Rishav

53

이를 위해 PIL (Pillow)을 가져와야합니다. 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

(왼쪽, 위, 오른쪽, 아래)는 두 점을 의미합니다.

  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.