python处理圆角图片、圆形图片的例子

处理圆角图片和圆形图片是图片处理中比较常见的需求,在Python中也有很多方法来实现这个功能,下面我将为您提供完整的攻略。

处理圆角图片

方法一:Pillow库

Pillow库是Python中的一款图像处理库,它可以方便地处理图片,其中包括处理圆角图片的功能。

示例代码如下:

from PIL import Image, ImageDraw

def round_corner(radius, width, fill):
    """定义一个生成圆角图片的函数"""
    # 打开原始图片
    im = Image.open('original_image.jpg')
    # 创建一个白色背景图片
    corner_radius = radius*width
    corner = Image.new('RGBA', (2*corner_radius, 2*corner_radius), (255, 255, 255, 0))
    # 定义一个可以画圆角的画笔
    draw = ImageDraw.Draw(corner)
    draw.pieslice((0, 0, 2*corner_radius, 2*corner_radius), 180, 270, fill=fill)
    draw.pieslice((width, 0, 2*corner_radius + width, 2*corner_radius), 270, 360, fill=fill)
    draw.rectangle((corner_radius, 0, width + corner_radius, 2*corner_radius), fill=fill)
    draw.rectangle((0, corner_radius, 2*corner_radius, corner_radius + width), fill=fill)
    # 生成圆角图片
    corner_mask = corner.convert('L')
    im.putalpha(corner_mask)
    # 保存圆角图片
    im.save('round_corner_image.jpg')

这个函数的参数包括圆角半径radius、圆角宽度width和填充颜色fill。调用该函数后,它会自动读取当前目录下的original_image.jpg,根据设置的参数生成圆角图片,并保存在当前目录下的round_corner_image.jpg

方法二:OpenCV库

OpenCV库是一款专业的图像处理库,也可以用来处理圆角图片。

示例代码如下:

import cv2
import numpy as np

def round_corner(radius):
    """定义一个生成圆角图片的函数"""
    # 打开原始图片
    img = cv2.imread('original_image.jpg', cv2.IMREAD_UNCHANGED)
    # 获取原始图片的大小和通道数
    h, w, c = img.shape
    # 创建一个黑色背景图片
    corner = np.zeros((h, w, 4), dtype=np.uint8)
    corner[:, :, 3] = 255
    # 生成圆角蒙版
    corner_radius = radius*w
    y, x = np.ogrid[-corner_radius:h-corner_radius, -corner_radius:w-corner_radius]
    mask = x*x + y*y <= corner_radius*corner_radius
    corner[mask] = img[mask]
    # 保存圆角图片
    cv2.imwrite('round_corner_image.jpg', corner)

这个函数的参数为圆角半径radius。调用该函数后,它会自动读取当前目录下的original_image.jpg,根据设置的参数生成圆角图片,并保存在当前目录下的round_corner_image.jpg

处理圆形图片

方法一:Pillow库

在Pillow库中处理圆形图片也比较容易,可以使用ImageDraw模块中的ellipse()函数。

示例代码如下:

from PIL import Image, ImageDraw

def circle_image():
    """定义一个生成圆形图片的函数"""
    # 打开原始图片
    im = Image.open('original_image.jpg')
    # 获取原始图片的大小
    size = min(im.size)
    # 创建一个透明度为0的白色背景图片
    circle = Image.new('RGBA', im.size, (255, 255, 255, 0))
    draw = ImageDraw.Draw(circle)
    # 生成圆形蒙版
    draw.ellipse((0, 0, size, size), fill=(255, 255, 255, 255))
    # 合成圆形图片
    circle_mask = circle.convert('L')
    im.putalpha(circle_mask)
    # 保存圆形图片
    im.save('circle_image.jpg')

调用该函数后,它会自动读取当前目录下的original_image.jpg,根据原始图片的大小生成圆形蒙版,并将原始图片与蒙版合成,最终保存圆形图片到当前目录下的circle_image.jpg

方法二:OpenCV库

在OpenCV库中生成圆形图片也很容易,可以使用cv2.circle()函数。

示例代码如下:

import cv2
import numpy as np

def circle_image():
    """定义一个生成圆形图片的函数"""
    # 打开原始图片
    img = cv2.imread('original_image.jpg', cv2.IMREAD_UNCHANGED)
    # 创建一个黑色背景图片
    circle = np.zeros((img.shape[0], img.shape[1], 4), dtype=np.uint8)
    # 获取原始图片的中心位置和半径长度
    center = (img.shape[1]//2, img.shape[0]//2)
    radius = min(center)
    # 生成圆形蒙版
    cv2.circle(circle, center, radius, (255, 255, 255, 255), -1, cv2.LINE_AA)
    # 合成圆形图片
    circle_mask = circle[:, :, 3]
    img = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
    img[np.where(circle_mask == 0)] = 0
    # 保存圆形图片
    cv2.imwrite('circle_image.jpg', img)

调用该函数后,它会自动读取当前目录下的original_image.jpg,根据原始图片的中心位置和半径长度生成圆形蒙版,并将原始图片与蒙版合成,最终保存圆形图片到当前目录下的circle_image.jpg

以上就是处理圆角图片和圆形图片的两种方法和示例代码,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python处理圆角图片、圆形图片的例子 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python如何存储数据到json文件

    下面我会给你详细讲解Python如何存储数据到json文件的完整攻略。 1.准备工作 在Python中,存储数据到json文件需要使用内置模块json,首先导入该模块: import json 2.将数据存储为json文件 2.1 将字典存储为json文件 将字典存储为json文件,需要使用json.dump()函数,该函数将字典(或其他可序列化的对象)序列…

    python 2023年6月3日
    00
  • Python retrying 重试机制详解

    以下是关于 Pythonretrying 重试机制的完整攻略: 问题描述 在 Python 中,有时候我们需要在某些操作失败时进行重试。retrying 是一个 Python,它提供了一种简单的方法来实现重试机制。本文将详介绍 Pythonretrying 的使用方法。 解决方法 使用以下步骤解决 Pythonretrying 重试机制问题: 安装 Pyth…

    python 2023年5月13日
    00
  • Python数据结构与算法之链表,无序链表详解

    Python数据结构与算法之链表,无序链表详解 介绍 链表是一种基础的数据结构,是由一系列节点组成的线性结构。它的每个节点都包括两个部分,一个是存储数据的部分,另一个是指向下一个节点的部分。链表有很多种不同的形式,其中无序链表是其中最基础同时也是最简单的一种。无序链表可以用于存储任意类型的数据,不同于数组,它没有固定的大小限制。 实现无序链表的基本结构 链表…

    python 2023年5月14日
    00
  • Python 元编程

    作者:袁首京 原创文章,转载时请保留此声明,并给出原文连接。 元编程并不象它听起来那么时髦和新奇。常用的 decorator 就可以认为是一种元编程。简单来说,元编程就是编写操作代码的代码。 有点绕,是吧?别着急,咱们一点一点来讨论。 注意:本文中的代码适用于 Python 3.3 及以上。 元类 多数编程语言中,一切东西都有类型。Python 也不例外,我…

    python 2023年4月18日
    00
  • 还不知道Anaconda是什么?读这一篇文章就够了

    还不知道Anaconda是什么?读这一篇文章就够了 如果你是一名数据分析或机器学习的初学者,那么你一定听说过Anaconda。简单来说,Anaconda是一款全平台的开源Pyton发行版,它能够帮你管理Python库和环境。 为什么要使用Anaconda? 管理Python库避免冲突:使用Anaconda后,你可以使用包管理工具conda来方便地管理Pyth…

    python 2023年5月14日
    00
  • 可以在 Python 中通过 % 运算符进行自定义格式化吗?

    【问题标题】:Can custom formatting through the % operator be done in Python?可以在 Python 中通过 % 运算符进行自定义格式化吗? 【发布时间】:2023-04-04 03:42:02 【问题描述】: 是否可以在 Python 中使用% 运算符以自己特定的方式格式化一个类?我对格式字符串类…

    Python开发 2023年4月6日
    00
  • Python3基础之函数用法

    Python3基础之函数用法攻略 在Python中,函数是一段封装了特定功能的代码片段。当需要反复执行相同的内容时,我们可以将这段代码封装成一个函数。函数的定义以def关键字为开头,后面跟上函数名、形参、以及函数体。在调用时,只需要使用函数名和实参即可。 函数定义 函数的定义通常包括以下几个部分: 函数名 函数名是用来调用函数的,它要求是唯一的、有意义的,以…

    python 2023年6月5日
    00
  • python升级pip及失败处理方式

    当我们在使用Python时,pip是一个非常重要的工具,用于安装和管理Python模块。但是,有时候我们会遇到pip版本过低或者安装失败的问题。本文将详细讲解Python级pip及失败处理方式的完整攻略,包括使用命令升级pip、手动安装pip、使用get-pip.py脚本等方法。 使用命令升级pip 在Linux或MacOS系统中,可以以下命令来升级pip:…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部