gpt4 book ai didi

python - 使用 PIL 复制 ImageMagicks 'Badge using Lighting Effects'

转载 作者:太空宇宙 更新时间:2023-11-03 19:14:54 24 4
gpt4 key购买 nike

ImageMagick 有一种很酷的技术,可以将图像“包裹”到灰度“蒙版”上。它为缩略图创建了很酷的按钮效果。我需要帮助将我见过的使用 ImageMagick 完成的方法转换为 PIL。我不想对 ImageMagick 使用任何包装器。我需要在 PIL 中重新创建它。我不想使用传统的面具。 PIL 是否有足够的能力重现这种效果?

ImageMagick 中的原始内容: http://www.imagemagick.org/Usage/thumbnails/#badge_lighting

我非常熟悉基本的 ImageMagick 和 PIL,例如缩放和线条绘制,但这个示例复杂。有 PIL 专家可以提供帮助吗?

ImageMagick 来源

# merge "mask 'n' paint" images with a gray image,
# to create a "lighting mask"
convert -size 90x90 xc:gray50 -alpha set \
badge_mask.png -compose DstIn -composite \
badge_shading.png -compose Over -composite \
badge_lighting.png

# Apply the single "lighting mask"
convert thumbnail.gif -alpha set -gravity center -extent 90x90 \
badge_lighting.png \
\( -clone 0,1 -alpha Opaque -compose Hardlight -composite \) \
-delete 0 -compose In -composite \
badge_final.png

输入 RGB 图像 A(可能是 jpg)

输入 RGBA imageB(png 文件 - 灰度或 channel 将转换为)

输出RGBA结果图像(png文件)

最佳答案

这可能不完全是 imagemagick 所做的,但结果非常相似。我使用函数 (transparent_when_gray) 转换徽章模板像素值来创建 alpha 蒙版,该蒙版对于 127(这是徽章模板的“基本”颜色)完全透明,并且随着值变大或变小而变得更加不透明。然后我使用这个 alpha 蒙版来合成徽章模板和源图像。

import Image, ImageChops, ImageOps

def transparent_when_gray(x):
return 255 if x == 127 else 255 - 2 * abs(127 - x)

def mk_badge(img, template):
templ = template.convert('RGBA')
r, g, b, alpha = templ.split()
gray = ImageOps.grayscale(Image.merge('RGB', (r, g, b)))
amask = gray.point(transparent_when_gray)

res = ImageChops.composite(img, templ, amask)
res.putalpha(alpha)
return res

if __name__ == '__main__':
image = Image.open('thumbnail.gif')
template = Image.open('badge_lighting.png')

image_cropped = ImageOps.fit(image, template.size)

badge = mk_badge(image_cropped, template)
badge.save('badge.png')

关于python - 使用 PIL 复制 ImageMagicks 'Badge using Lighting Effects',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com