圖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 圖片處理的強大,好多還值得我去學習研究。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com