1
momocraft 2022-12-09 10:39:57 +08:00
"半透明" 反映在你的代码哪里?
或者说如果你主动画一个不透明的黑正方形, 和现在代码的不同在哪里? |
2
ysc3839 2022-12-09 10:39:58 +08:00
|
3
xuelu520 2022-12-09 10:44:55 +08:00
draw.rectangle((x, y, x + 300, y + 300), fill='black')
这不是黑色的吗?设置半透明的文档看下? |
4
liyang5945 2022-12-09 10:45:11 +08:00
你这 fill 的不是 black 吗 哪来的透明
|
5
buyan3303 2022-12-09 10:45:42 +08:00
https://blog.csdn.net/diyiday/article/details/103781429:
1 、判断图片是否都是 RGBA 通道的。不是的话,需要转换一下。否则合并的图片不会透明 |
6
y4nssss OP @momocraft
@xuelu520 @liyang5945 draw.rectangle((x, y, x + 300, y + 300), fill=(0, 0, 0, 0)) 修改了代码,也还是不行 |
8
reallittoma 2022-12-09 11:03:27 +08:00
建议先去了解一下什么是 Alpha 通道,然后把 fill color 设置成 (0, 0, 0, 128) 看看效果。
|
9
y4nssss OP @reallittoma fill=(0, 0, 0, 0)) 已经修改成透明了 还是黑色
|
10
actar 2022-12-09 11:09:44 +08:00
jpg 格式的图片好像没有透明通道吧?存成 png 呢?
|
11
y4nssss OP @momocraft
@ysc3839 @xuelu520 @liyang5945 @buyan3303 @reallittoma @actar 感谢 最后搞定了 import os import random from PIL import Image from PIL import ImageDraw from PIL import ImageFilter # 获取当前目录下所有图片文件 files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith(('.png', '.jpg'))] # 随机选择一个图片文件 file = random.choice(files) # 打开图片并缩放 image = Image.open(file) image = image.resize((900, 383)) # 对图片进行高斯模糊 image = image.filter(ImageFilter.GaussianBlur(radius=5)) # 转换图片为 RGBA 格式 image = image.convert('RGBA') # 创建一个新的画布 canvas = Image.new('RGBA', (900, 383), (255, 255, 255, 0)) # 计算正方形的位置 x = (900 - 300) // 2 y = (383 - 300) // 2 # 在画布上绘制透明黑色正方形 black = (0, 0, 0, 128) canvas.paste(black, (x, y, x+300, y+300)) # 给正方形添加边框 width = 5 for i in range(width): draw = ImageDraw.Draw(canvas) draw.rectangle((x+i, y+i, x+300-i, y+300-i), outline=(0, 0, 0, 255)) # 合并图片 result = Image.alpha_composite(image, canvas) # 保存图片 if not os.path.exists('000'): os.makedirs('000') result.save(os.path.join('000', '1.png')) |