python處理圓角圖片、圓形圖片的例子

來源:互聯網
上載者:User
如下:


圖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 圖片處理的強大,好多還值得我去學習研究。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.