CodeGym /课程 /Python SELF ZH /图像裁剪和旋转——内容准备技巧

图像裁剪和旋转——内容准备技巧

Python SELF ZH
第 45 级 , 课程 2
可用

1. 图像裁剪

裁剪概念及其应用

好啦,让我们来了解一下如何裁剪和旋转图像。这可是个很实用的技能, 不管是准备网站图形还是为社交媒体创建内容都用得上。

图像裁剪就像是把照片里不需要的边框去掉,专注于主要的主体。想象一下, 你拍了一张很棒的日落照片,但边角处意外有路人甲。通过裁剪, 你能轻松搞定他们(虚拟地搞定啦,别误会)。

方法 crop()

方法 crop() 接受一个矩形区域的坐标,表示你想从图像中裁剪出的部分。 坐标由四个值组成:(左, 上, 右, 下)


# 裁剪图像
cropped_image = image.crop((100, 100, 400, 400))
 # 保存裁剪后的图像
cropped_image.save("cropped_example.jpg")
        

在这个例子里,图像将被裁剪到从左上角坐标 (100, 100) 到右下角坐标 (400, 400) 的区域。该方法会从原始图像中创建一个新的图像。

基于图像尺寸的动态裁剪

如果你想裁剪图像的中心部分,可以根据尺寸计算裁剪的坐标:


width, height = image.size
left = (width - 200) / 2
top = (height - 200) / 2
right = (width + 200) / 2
bottom = (height + 200) / 2

center_cropped_image = image.crop((left, top, right, bottom))
center_cropped_image.save("center_cropped_example.jpg")
        

这段代码会裁剪出尺寸为 200x200 像素的图像中心部分。坐标的计算可以确保 裁剪区域精确位于图像中央。

2. 图像旋转

图像旋转可以改变其方向,这在纠正照片方向错误或制造艺术效果时非常有用。

方法 rotate()

方法 rotate() 根据给定的角度逆时针旋转图像。角度以度数表示, 该方法会创建一个新的旋转后的图像。


# 图像逆时针旋转90度
rotated_image = image.rotate(90)
rotated_image.save("rotated_90_example.jpg")
        

在这个例子中,图像会被逆时针旋转90度。当然你也可以指定其他角度(比如45、180或270度) 来达到想要的效果。

控制旋转时的白边

默认情况下,rotate() 会在图像边缘添加白边(如果使用 RGBA 模式则是透明边), 这样可以保留图像的全部内容。如果你想图像填满整个框而没有边框,可以使用参数 expand=True


# 使用扩展旋转图像以填满整个框
rotated_expanded_image = image.rotate(45, expand=True)
rotated_expanded_image.save("rotated_expanded_example.jpg")
        

在这种情况下,Pillow 会增加图像尺寸来容纳其所有内容, 这在以非标准角度(比如45度)旋转时非常有用。

3. 图像镜像

镜像可以水平或垂直翻转图像。当你想改变照片中物体的方向或创造对称效果时, 镜像操作会派上用场。

方法 transpose()

方法 transpose() 支持镜像操作,并支持以下参数:

  • Image.FLIP_LEFT_RIGHT: 水平翻转。
  • Image.FLIP_TOP_BOTTOM: 垂直翻转。

# 水平翻转
flipped_horizontal = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_horizontal.save("flipped_horizontal_example.jpg")

# 垂直翻转
flipped_vertical = image.transpose(Image.FLIP_TOP_BOTTOM)
flipped_vertical.save("flipped_vertical_example.jpg")
        

这些命令会分别水平和垂直翻转图像,可用于各种效果或修正方向。

裁剪、旋转和镜像的实际应用示例

  1. 聚焦图像的特定区域: 裁剪可以突出图像中你需要的部分, 适合创建人像、去除不必要的细节以及为社交媒体或网站准备图像。
  2. 修正图像方向: 旋转操作可用于修正照片的方向, 特别是在设备拍摄时方向错误的情况下。例如,将以横向拍摄的图像 校正为纵向以便发布。
  3. 创造对称效果: 镜像常用于设计中,用于创建对称图像、有趣的视觉效果, 或提升构图。

4. 常见错误及如何避免

使用 Pillow 时可能会遇到一些错误,初学者可能会经常碰到。 比如尝试裁剪超出图像实际尺寸的区域。请始终检查图像尺寸, 并确保裁剪的坐标在其范围内。

另一个细节是,当旋转图像时,如果使用方法 `rotate` 而没有额外设置, 图像可能看起来被裁掉。这是因为旋转时图像尺寸发生了变化。 为避免这种情况,可以使用参数 expand=True 来自动调整尺寸:


# 旋转图像45度并扩展以避免角落被裁掉
rotated_image = image.rotate(45, expand=True)
rotated_image.save("rotated_expanded.jpg")
        
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION