python圖像白色背景變透明

最近在用python畫中國地圖的降水圖,生成的圖片背景是黑色的,並且還有黑框。python

黑框的處理看網上說的是這麼設定一下就行了,可是不起做用。瀏覽器

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)

還有背景白色弄成透明的,網上說多加一個參數就行了,plt.plot(, transparent=True),這個確實起做用,可是對我這種處理起來比較複雜的問題,有時候中間圖像須要切割就沒啥用了。因此在網上找到了如下處理方法。spa

def transparent_back(img):
    img = img.convert('RGBA')
    L, H = img.size
    color_0 = img.getpixel((2,2))
    for h in range(H):
        for l in range(L):
            dot = (l,h)
            color_1 = img.getpixel(dot)
            if color_1 ==color_0:
                color_1 = color_1[:-1] + (0,)
                img.putpixel(dot,(0,0,0,0))
    return img
 img=Image.open('temp1.png')
 img=transparent_back(img)
 img.save('round2.png')

 下面去掉邊框code

ax.background_patch.set_visible(False)
ax.outline_patch.set_visible(False)

該代碼能夠有效將白色背景轉爲透明的,可是可能會將正常的圖中白色的像素點轉爲透明的,因此謹慎使用。圖片

同時爲了消除黑色邊框,又在判斷中加入了兩條,最後變成了以下代碼:get

def transparent_back(img):
    img = img.convert('RGBA')
    L, H = img.size
    color_0 = img.getpixel((2,2))
    for h in range(H):
        for l in range(L):
            dot = (l,h)
            color_1 = img.getpixel(dot)
            if color_1 ==color_0 or l==0 or h==0:
                color_1 = color_1[:-1] + (0,)
                img.putpixel(dot,(0,0,0,0))
    return img
 img=Image.open('temp1.png')
 img=transparent_back(img)
 img.save('round2.png')

 同時補充一下透明的基礎原理以下:class

RGB沒有透明選項,將RGBA 設置爲0%便可變成無色透明。RGBA中alpha通道通常用做不透明度參數。若是一個像素的alpha通道數值爲0%,那它就是徹底透明的(也就是看不見的),而數值爲100%則意味着一個徹底不透明的像素。基礎

RGBA在RGB的基礎上多了控制alpha透明度的參數。以上R、G、B三個參數,正整數值的取值範圍爲:0 - 255。百分數值的取值範圍爲:0.0% - 100.0%。超出範圍的數值將被截至其最接近的取值極限。並不是全部瀏覽器都支持使用百分數值。A參數,取值在0~1之間,不可爲負值。 原理