用Python对图片进行循环剪裁

用Python对图片进行循环剪裁

在这篇文章中,我们将学习使用pillow库对图像进行圆形裁剪。圆周裁剪图像是指在图像中选择一个圆形区域,并去除圆形以外的所有东西。

步骤:

  • 如果你有一个L模式的图像,图像就会变成灰阶。所以我们创建一个模式为 “L “的新图像。
  • 一个中间有白色圆圈的图像被创建,其尺寸与输入图像相同。
  • 将一个新的图像转换为一个数组。
  • 从一个数组中转换原始图像。
  • 将这两个阵列堆叠在一起,只裁剪出中间的圆形部分。

让我们来看看这个初始图像:

用Python对图片进行循环剪裁

第1步:导入模块并读取图像。

import numpy as np
from PIL import Image, ImageDraw
  
  
img = Image.open("/content/gfg.jpeg")
display(img)

输出:

用Python对图片进行循环剪裁

第2步:创建一个图像。

我们将使用pieslice()函数来获取图像中白色的圆形部分,然后我们将叠加原始图像和发光图像。

ImageDraw.Draw.pieslice()与弧线相同,但也在端点和边界框的中心之间绘制直线。

语法: PIL.ImageDraw.Draw.pieslice(xy, start, end, fill=None, outline=None)

参数:
xy – 四个点来定义边界框。[(x0, y0), (x1, y1)] 或 [x0, y0, x1, y1] 的序列。
start – 起始角度,单位是度。角度从3点钟方向开始测量,顺时针增加。
end – 结束的角度,以度为单位。
fill – 用于填充的颜色。
outline – 轮廓使用的颜色。

返回: 一个薄片形状的图像对象。

代码:

h,w = img.size
  
# creating luminous image
lum_img = Image.new('L',[h,w] ,0) 
draw = ImageDraw.Draw(lum_img)
draw.pieslice([(0,0),(h,w)],0,360,fill=255)
img_arr = np.array(img)
lum_img_arr = np.array(lum_img)
display(Image.fromarray(lum_img_arr))

输出:

用Python对图片进行循环剪裁

步骤3:将这两个数组堆叠在一起,只裁剪出中间的圆形部分。

final_img_arr = np.dstack((img_arr, lum_img_arr))
display(Image.fromarray(final_img_arr))

输出:

用Python对图片进行循环剪裁

以下是完整的实现方案:

import numpy as np
from PIL import Image, ImageDraw
  
img=Image.open("img.jpg")
display(img)
  
height,width = img.size
lum_img = Image.new('L', [height,width] , 0)
  
draw = ImageDraw.Draw(lum_img)
draw.pieslice([(0,0), (height,width)], 0, 360, 
              fill = 255, outline = "white")
img_arr =np.array(img)
lum_img_arr =np.array(lum_img)
display(Image.fromarray(lum_img_arr))
final_img_arr = np.dstack((img_arr,lum_img_arr))
display(Image.fromarray(final_img_arr))

输出:

用Python对图片进行循环剪裁

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python pil