python - PIL:使图像按百分比透明
问题描述
如何使watermark
图像透明?例如,60% 透明。我试过了,putalpha
但似乎没有按预期工作
from PIL import Image
temp_image = Image.open('test1.jpg')
watermark = Image.open('watermark.png')
x, y = temp_image.size
image_with_watermark = Image.new('RGBA', (x, y), (0, 0, 0, 0))
image_with_watermark.paste(temp_image, (0, 0))
image_with_watermark.paste(watermark, (0, 0), mask=watermark)
image_with_watermark.show()
编辑:
好的,这可行,需要弄清楚如何使用 % 进行设置
from PIL import Image
temp_image = Image.open('test1.jpg')
watermark = Image.open('watermark.png')
x, y = temp_image.size
watermask = watermark.convert("L").point(lambda x: min(x, 50))
watermark.putalpha(watermask)
image_with_watermark = Image.new('RGBA', (x, y), (0, 0, 0, 0))
image_with_watermark.paste(temp_image, (0, 0))
image_with_watermark.paste(watermark, (0, 0), mask=watermark)
image_with_watermark.show()
嗯,水印的质量在以下之后非常低:
watermask = watermark.convert("L").point(lambda x: min(x, 50))
watermark.putalpha(watermask)
实现我需要的最佳方法是什么?
解决方案
这是一个适用于 RGB 和 RGBA 水印图像的解决方案:
from PIL import Image
TRANSPARENCY = 65 # percentage
temp_image = Image.open('test1.jpg')
watermark = Image.open('watermark.png')
if watermark.mode!='RGBA':
alpha = Image.new('L', watermark.size, 255)
watermark.putalpha(alpha)
paste_mask = watermark.split()[3].point(lambda i: i * TRANSPARENCY / 100.)
temp_image.paste(watermark, (0,0), mask=paste_mask)
temp_image.save('res.png')
示例图片(作者 -尼尔霍华德):
样本水印(背景透明):
样本结果:
推荐阅读
- haproxy - 如何在Haproxy中根据url参数形成一个stick table
- angular - 根据Angular中父组件到子组件的选项传递动态Html元素?
- r - 在ggplot中为具有相同数量的箱绘制平均x和平均y?
- flutter - 如何在 DropdownButton 中更改 Flutter DropdownMenuItem 的宽度/填充?
- c# - 使用 Selenium Webdriver C# 和 Chrome 浏览器弹出窗口中的“允许多次下载”
- python - 从熊猫列中删除重复的字母只存在于彼此,Python
- python - 有没有比这种循环逻辑更好的方法?
- rdkit - 如何使用 rdkit 将微笑转换为指纹?
- java - Java 中毕达哥拉斯树的可视化表示
- localization - TYPO3:如何在TYPO3 9中将新闻的sys_language_uid设置为-1?