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),这个确实起作用,但是对我这种处理起来比较复杂的问题,有时候中间图像需要切割就没啥用了。所以在网上找到了以下处理方法。

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')

 下面去掉边框

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

该代码可以有效将白色背景转为透明的,但是可能会将正常的图中白色的像素点转为透明的,所以谨慎使用。

同时为了消除黑色边框,又在判断中加入了两条,最后变成了如下代码:

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')

 同时补充一下透明的基础原理如下:

RGB没有透明选项,将RGBA 设置为0%即可变成无色透明。RGBA中alpha通道一般用作不透明度参数。如果一个像素的alpha通道数值为0%,那它就是完全透明的(也就是看不见的),而数值为100%则意味着一个完全不透明的像素。

RGBA在RGB的基础上多了控制alpha透明度的参数。以上R、G、B三个参数,正整数值的取值范围为:0 - 255。百分数值的取值范围为:0.0% - 100.0%。超出范围的数值将被截至其最接近的取值极限。并非所有浏览器都支持使用百分数值。A参数,取值在0~1之间,不可为负值。 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值