最近在用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之间,不可为负值。