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

 更新时间:2014年04月25日 11:45:08   作者:  
最近因为工作需要,需要处理图片,一种是头像的方形图片处理成圆行的,一种是方形图片的4角变得椭圆点

效果图如下:


图1(头像图片剪成圆形的,其他为透明)


图2(给图片的4个角加椭圆)


以前没处理过,处理起来真是有点费力呀。

用到的模块:

复制代码 代码如下:

import os, math
import Image
import ImageDraw

1 头像图片剪成圆形的,其他为透明

搜索了好久,没有找到比较好的方法,有个博客(不好意思,忘记博客地址了)用了一个比较诡异的方法,我试了一下,除了处理jpg图片没有格式转换,其他的都没有问题,我当时就先按照那个方法来了

复制代码 代码如下:

def circle():

    ima = Image.open("test.jpg").convert("RGBA")

    size = ima.size

    # 因为是要圆形,所以需要正方形的图片

    r2 = min(size[0], size[1])

    if size[0] != size[1]:

        ima = ima.resize((r2, r2), Image.ANTIALIAS)

    imb = Image.new('RGBA', (r2, r2),(255,255,255,0))

    pima = ima.load()

    pimb = imb.load()

    r = float(r2/2) #圆心横坐标

    for i in range(r2):

        for j in range(r2):

            lx = abs(i-r+0.5) #到圆心距离的横坐标

            ly = abs(j-r+0.5)#到圆心距离的纵坐标

            l  = pow(lx,2) + pow(ly,2)

            if l <= pow(r, 2):

                pimb[i,j] = pima[i,j]

    imb.save("test_circle.png")

这个方法是 计算每个像素到原点(就是图片中心点)的距离来画圆形的


2、给图片的4个角加椭圆

复制代码 代码如下:

def circle_corder_image():

    im = Image.open("test.jpg").convert("RGBA")

    rad = 10  # 设置半径 

    circle = Image.new('L', (rad * 2, rad * 2), 0)

    draw = ImageDraw.Draw(circle)

    draw.ellipse((0, 0, rad * 2, rad * 2), fill=255)

    alpha = Image.new('L', im.size, 255)

    w, h = im.size

    alpha.paste(circle.crop((0, 0, rad, rad)), (0, 0))

    alpha.paste(circle.crop((0, rad, rad, rad * 2)), (0, h – rad))

    alpha.paste(circle.crop((rad, 0, rad * 2, rad)), (w – rad, 0))

    alpha.paste(circle.crop((rad, rad, rad * 2, rad * 2)), (w – rad, h – rad))

    im.putalpha(alpha)

    im.save('test_circle_corder.png')

用了这个方法后,想了一想,头像图片剪成圆形的,其他为透明,用这个方法也是可以的,于是画圆形有了下面的方法:

复制代码 代码如下:

def circle_new():

    ima = Image.open("test.jpg").convert("RGBA")

    size = ima.size

    r2 = min(size[0], size[1])

    if size[0] != size[1]:

        ima = ima.resize((r2, r2), Image.ANTIALIAS)

    circle = Image.new('L', (r2, r2), 0)

    draw = ImageDraw.Draw(circle)

    draw.ellipse((0, 0, r2, r2), fill=255)

    alpha = Image.new('L', (r2, r2), 255)

    alpha.paste(circle, (0, 0))

    ima.putalpha(alpha)

    ima.save('test_circle.png')

虽然最后我想要的都有了,但是通过对这2个问题的研究,我看到了python 图片处理的强大,好多还值得我去学习研究。

相关文章

  • Python中的查找算法代码实例

    Python中的查找算法代码实例

    这篇文章主要介绍了Python中的查找算法代码实例,算法是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出,简单来说,算法就是解决一个问题的具体方法和步骤,算法是程序的灵魂,需要的朋友可以参考下
    2023-07-07
  • Python多线程获取返回值代码实例

    Python多线程获取返回值代码实例

    这篇文章主要介绍了Python多线程获取返回值代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 关于python中密码加盐的学习体会小结

    关于python中密码加盐的学习体会小结

    这篇文章主要介绍了关于python中密码加盐的学习体会小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Django后端接收嵌套Json数据及解析详解

    Django后端接收嵌套Json数据及解析详解

    这篇文章主要介绍了Django后端接收嵌套Json数据及解析详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 详解使用Python+Pycaret进行异常检测

    详解使用Python+Pycaret进行异常检测

    异常检测提供了在数据中发现模式、偏差和异常的途径,这些模式、偏差和异常不限于模型的标准行为。本文将用Python Pycaret进行异常检测,感兴趣的可以了解一下
    2022-03-03
  • 使用Python来编写HTTP服务器的超级指南

    使用Python来编写HTTP服务器的超级指南

    这篇文章主要介绍了使用Python来编写HTTP服务器的超级指南,同时介绍了基于Python框架的web服务器的编写方法,译文从理论到实现讲得都很生动详细,十分推荐!需要的朋友可以参考下
    2016-02-02
  • python不等于运算符的具体使用

    python不等于运算符的具体使用

    在Python语言中,用 != 表示不等于,本文主要介绍了python不等于运算符的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • python中Pyqt5使用Qlabel标签进行视频播放

    python中Pyqt5使用Qlabel标签进行视频播放

    这篇文章主要介绍了python中Pyqt5使用Qlabel实现标签进行视频播放,QLabel是界面中的标签类,继承自QFrame类,提供文本和图像的显示,是一种展示控件,下文相关内容介绍需要的小伙伴可以参考一下
    2022-04-04
  • python目标检测SSD算法预测部分源码详解

    python目标检测SSD算法预测部分源码详解

    这篇文章主要为大家介绍了python目标检测SSD算法预测部分源码详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 用python拟合等角螺线的实现示例

    用python拟合等角螺线的实现示例

    这篇文章主要介绍了用python拟合等角螺线的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论