10人参与 • 2025-12-11 • Python
pil库(python imaging library)的image.crop()方法是图像处理的核心工具,通过定义四元组坐标实现矩形区域裁剪。函数签名如下:
cropped_image = img.crop(box)
其中box=(left, upper, right, lower)为裁剪区域的边界坐标:
right需大于left,lower需大于upper,否则触发systemerror: tile cannot extend outside imagecenter_x, center_y = img.size[0]//2, img.size[1]//2 box = (center_x-128, center_y-128, center_x+128, center_y+128)
# 合法裁剪范围:left∈[0,1920], upper∈[0,1200] cropped = img.crop((0, 0, 3000, 800)) # 实际裁剪区域调整为(0,0,1920,800)
场景1:九宫格裁剪
from pil import image
img = image.open('flower.jpg')
w, h = img.size
grid_w, grid_h = w//3, h//3
for i in range(3):
for j in range(3):
box = (i*grid_w, j*grid_h, (i+1)*grid_w, (j+1)*grid_h)
region = img.crop(box)
region.save(f'grid_{i}_{j}.png')
场景2:动态坐标计算
通过元素定位实现精准裁剪(如网页截图元素提取):
from selenium import webdriver
from pil import image
driver = webdriver.chrome()
driver.get('https://www.baidu.com')
driver.save_screenshot('baidu.png')
element = driver.find_element_by_id('su')
location = element.location
size = element.size
img = image.open('baidu.png')
cropped = img.crop((
location['x'],
location['y'],
location['x'] + size['width'],
location['y'] + size['height']
))
cropped.save('button.png')
driver.execute_script('document.body.style.zoom="0.8"')
import cv2
img = cv2.imread('image.tif')
cropped = img[100:300, 200:400] # (y1:y2, x1:x2)
cv2.imwrite('cropped.tif', cropped)
imagechops优化:from pil import imagechops
mask = image.new('l', img.size, 0)
draw = imagedraw.draw(mask)
draw.rectangle(box, fill=255)
cropped = imagechops.multiply(img, mask)
image.paste()配合透明蒙版实现img.size动态计算相对坐标if img.getexif().get(0x0112) in [3,6,8]:
img = img.transpose(image.rotate_90)
通过系统掌握crop()函数的参数特性与边界处理逻辑,结合具体场景的坐标计算方法,可高效完成从基础裁剪到复杂图像处理的各类任务。实践建议从简单矩形裁剪入手,逐步掌握动态坐标计算、格式兼容处理等进阶技巧,最终实现专业级的图像处理能力。
到此这篇关于python的pil对象crop函数的实现示例的文章就介绍到这了,更多相关python的pil对象crop函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论