如何使用PIL裁剪图像?

200

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

4个回答

254

有一个crop()方法:

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

2
是的,我知道im.crop(box)用于裁剪图像。但是我想只裁剪图像的上部和下部而不是左右两侧,尽管box()需要4元组,但我不知道如何裁剪图像的上部和下部。 - Taj Koyal
5
@TajKoyal: ninjagecko正在向您展示如何裁剪顶部和底部。他为新图像指定了一个矩形。您可以看到他从顶部和底部点的y值中刮掉了30个像素。如果以任何方式偏移x值,那将影响左右两侧。 - jdi
30
对于像我这样懒惰的人来说: 参数:box - 作为 (左,上,右,下) 元组的裁剪矩形。 - Rishav

85

你需要导入PIL(Pillow)库。假设你有一个大小为1200x1600的图像,我们将从400x400的位置裁剪至800x800的位置。

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

79

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

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


34

更简单的方法是使用ImageOps中的crop。您可以输入要从每个侧面裁剪的像素数量。

from PIL import ImageOps

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接