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文件-灰度或通道将被转换为)
输出RGBA resultimage(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“使用照明效果的徽章”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11679563/