如何使用 PIL 裁剪图像?

我想裁剪图像的方式,删除前30行和最后30行从给定的图像。我已经找过了,但是没有找到确切的答案。有人有什么建议吗?

245583 次浏览

有一种 crop()方法:

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

你需要进口 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()

更简单的方法是使用来自 ImageOps的作物。您可以提供要从每一边裁剪的像素数。

from PIL import ImageOps


border = (0, 30, 0, 30) # left, top, right, bottom
ImageOps.crop(img, border)

(左,上,右,下)表示两点,

  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()

enter image description here

坐标系

Python 图像库使用笛卡尔像素坐标系,左上角为(0,0)。请注意,坐标指的是隐含的像素角点; 地址为(0,0)的像素的中心实际上位于(0.5,0.5)。

坐标通常作为2元组(x,y)传递给库。矩形表示为4个元组,首先给出左上角。例如,覆盖所有800x600像素图像的矩形被写为(0,0,800,600)。