图片颜色通道change

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 25 09:43:57 2018

@author: 
"""

from PIL import Image
from pylab import *
import os
import shutil
dirlis = '/home/zq/Desktop/train_rgb/'
dirsave = '/home/zq/Desktop/train_rgb_plus/'

for names in os.listdir(dirlis):
    namesplit = names.split('.')
    if(namesplit[1]=='png'):
        #读取图片并转为数组 
        img1 = array(Image.open(dirlis+namesplit[0]+'.png')) 
        img2 = array(Image.open(dirlis+namesplit[0]+'.png')) 
        #BGR --> RGB
        img1 = img1[:,:, (2, 1, 0)]
        imsave(dirsave+namesplit[0]+'rb.png', img1)
        #BGR -->BRG
        img2 = img2[:,:, (1, 0, 2)]
        imsave(dirsave+namesplit[0]+'rg.png', img2)
    else:
        shutil.copyfile(dirlis+names,dirsave+namesplit[0]+'rb.json')
        shutil.copyfile(dirlis+names,dirsave+namesplit[0]+'rg.json')

 

### 处理带Alpha通道的PNG图像 在图形编程中,处理带有Alpha通道的PNG图像是常见的需求之一。PIL库(现主要指其活跃分支Pillow)提供了强大而灵活的功能来操作这类图像。 #### 打开并显示具有Alpha通道图片 要加载一张包含透明度信息的PNG文件,可以简单地使用`Image.open()`方法: ```python from PIL import Image img = Image.open('path_to_image.png') print(img.mode) # 输出模式,RGBA表示存在alpha通道 ``` 这段代码会打印出图像的颜色模式;如果结果为`'RGBA'`,则说明该图确实含有透明层[^1]。 #### 修改Alpha值 有时可能需要调整整个图像或部分区域的不透明程度。这可以通过获取像素数据并直接修改对应的A分量完成: ```python import numpy as np def change_alpha(image, new_alpha=128): """更改给定图像的所有像素点到指定的新alpha值""" image_np = np.array(image.convert('RGBA')) alpha_channel = image_np[:, :, 3] alpha_channel[:] = new_alpha result_img = Image.fromarray(image_np) return result_img ``` 此函数接受一个参数`new_alpha`,它定义了新的全局透明级别(0-完全透明; 255-完全不透)[^2]。 #### 合成两张含Alpha通道图片 当涉及到多张有独立透明属性的画面组合时,利用`paste()`方法配合mask参数能够很好地达成目的: ```python background = Image.new("RGBA", (width, height), color=(r,g,b,a)) foreground = Image.open(foreground_path).convert("RGBA") combined = background.copy() combined.paste(foreground, box=(left,top), mask=foreground) # Save the resulting image with transparency preserved. combined.save(output_filename, format="PNG") ``` 上述脚本创建了一个新背景,并将前景置于特定位置上,同时保持原有的透明效果不变[^4]。 #### 移除Alpha通道或将白色设为透明 对于某些应用场景而言,移除现有的Alpha通道或是让某种颜色变得透明可能是必要的步骤。下面展示了两种情况下的解决方案: ##### 去掉Alpha通道的方法如下所示: ```python rgb_im = img.convert('RGB') rgb_im.save('output_without_alpha.jpg', quality=95) ``` 注意这里的输出被保存成了JPEG格式,因为这种格式并不支持Alpha通道[^3]。 ##### 将纯白变为透明的例子则是这样的: ```python white_transparent = Image.new("RGBA", img.size, "WHITE") # 创建白色的底板 white_transparent.paste(img, (0, 0), img) # 把原图贴上去,用自身的alpha做遮罩 final_result = white_transparent.convert("RGBA") # 转回RGBA以便后续操作 data = final_result.getdata() new_data = [] for item in data: if item[:3] == (255, 255, 255): # 如果是白色,则改为透明 new_data.append((255, 255, 255, 0)) else: new_data.append(item) final_result.putdata(new_data) final_result.save("result_with_white_as_transparent.png", "PNG") ``` 这种方法遍历每一个像素点的数据,判断是否满足条件后再决定如何设置最终的色彩和透明度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值