Python实用技巧 使用pillow库批量修改文件夹下所有PNG图片透明度

 首先安装Pillow库(Pillow是Python图像处理函式库(PIL)的一个分支)

 在.py文件中引入os 和PIL库

import os
from PIL import Image

findall 方法进行对指定文件夹下所以文件夹进行遍历,再对.png结尾的文件进行透明度修改处理

def findall(path):
	dir_string = path
	file_list = os.listdir(dir_string)		#待修改文件夹
	currentpath = os.getcwd()		#得到进程当前工作目录
	os.chdir(dir_string)		#将当前工作目录修改为待修改文件夹的位置
	
	for fileName in file_list:		#遍历文件夹中所有文件
		if os.path.isdir(fileName):
			print('文件夹:'+fileName)
			findall(fileName)
		else:
			# print('非文件夹:' + fileName)
			if fileName.__contains__('.png'):
				changePngAlpha(fileName)
	print("---------------------------------------------------")
	os.chdir(currentpath)		#改回程序运行前的工作目录
	sys.stdin.flush()		#刷新
	print("修改后:"+str(os.listdir(dir_string)))
#输出修改后文件夹中包含的文件

 changePngAlpha对具体的文件进行透明度修改,alpha为0时继续减少还是0

# 改变图片透明度 RGBA模式
def changePngAlpha(path):
	img = Image.open(path)
	img = img.convert('RGBA')  # 修改为 RGBA 实际应用中部分文件可能会有失败,可能是存储格式问题暂未完全解决
	x, y = img.size
	# 设置每个像素点的值
	for i in range(x):
		for k in range(y):
			color = img.getpixel((i, k))
			color = color[:-1] + (color[3]-3,) # 这里设置将图片的Alpha透明度降低3
			img.putpixel((i, k), color)
	img.save(path)

 最后来看一下文件对比的效果

 成功达到效果。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
改变图片透明度 很好的学习用工码 attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); Bitmap resultImage = new Bitmap(srcImage.Width, srcImage.Height); Graphics g = Graphics.FromImage(resultImage); g.DrawImage(srcImage, new Rectangle(0, 0, srcImage.Width, srcImage.Height), 0, 0, srcImage.Width, srcImage.Height, GraphicsUnit.Pixel, attributes); return resultImage; } #region 不安全代码 需要设置项目允许不安全代码 /// /// 方法二 设置图像透明度,若原图不为32位ARGB格式,则自动转换为32位ARGB输出 /// /// 原图 /// 透明度(0~1之间双精度浮点数) //public static unsafe void SetTransparent(ref Bitmap src, double transparency) //{ // if (transparency 1.0) // throw new ArgumentOutOfRangeException("透明度必须为0~1之间的双精度浮点数"); // BitmapData srcData; // Rectangle rect; // byte* p; // rect = new Rectangle(0, 0, src.Width, src.Height); // src = src.Clone(rect, PixelFormat.Format32bppArgb); // //转换到32位,否则丢失透明度 // srcData = src.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); // //锁定字节数组到内存 // p = (byte*)srcData.Scan0.ToPointer(); // //获取字节数组在内存中地址 // if (src.PixelFormat == PixelFormat.Format32bppArgb) // { // //如果是32位图片,有Alpha通道,以原Alpha通道的值为基准 // p += 3; // //默认修改Alpha通道的值 // for (int i = 0; i < srcData.Stride * srcData.Height; i += 4) // { // *p = (byte)(*p * transparency); // //原Alpha通道值*透明度 // p += 4; // }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值