gpt4 book ai didi

c - ImageMagick 高级透明度控制

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:27 26 4
gpt4 key购买 nike

我正在尝试在基本图像上叠加(水印)。假设它看起来像这样:

enter image description here

带有“完全透明”文本的不透明矩形。 IE。文本的所有像素及其下方的背景都是透明的。

一种方式:

我在 Photoshop 中将不透明度设为 60%:

enter image description here

然后将其编写成代码:

MagickWand* overlay = NewMagickWand();
MagickReadImage(overlay, overlaypath);
MagickCompositeImage(wand, overlay, OverCompositeOp, 100, 100);
//all open/destroy code is omitted

结果是矩形是半透明的,而文本是完全透明的:

enter image description here

到目前为止一切顺利,但我还想通过应用程序配置来调节叠加不透明度,所以我尝试了第二种方式:

2 种方式:

在 Photoshop 中 100%(如本文中的第一张图片)并尝试通过 MagickWand 设置透明度:

MagickReadImage(overlay, overlaypath);
MagickSetImageOpacity(overlay, 0.6);
MagickCompositeImage(wand, overlay, OverCompositeOp, 100, 100);

结果是完全空白的矩形,虽然是半透明的

enter image description here

看起来 MagickSetImageOpacity每个 像素 alpha channel 设置为相同的 0.6 值,而不管其当前值如何。我需要的是 overlay 魔杖的每个像素的 currentAlpha -= givenAlpha。如果不手动迭代每个魔杖像素,这可能吗?

最佳答案

实现 currentAlpha -= givenAlpha 的正确方法是调用 PixelIterator , 和遍历每个像素的迭代器,并将 givenAlpha 应用于 PixelSetAlpha .但根据您的需要,您可以使用 MagickColorizeImage 应用相同的效果。 .

PixelWand *pColorize = NewPixelWand();
PixelWand *pGivenAlpha = NewPixelWand();
double userOpacity = 0.6;

// May need to be adjusted to "white" or "black" depending on your mask
PixelSetColor(pColorize, "transparent");
PixelSetAlpha(pGivenAlpha, userOpacity);

MagickWand *overlay = NewMagickWand();
MagickReadImage(overlay, overlaypath);
MagickColorizeImage(overlay, pColorize, pGivenAlpha); // Apply opacity filter
MagickCompositeImage(wand, overlay, OverCompositeOp, 100, 100);

关于c - ImageMagick 高级透明度控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24911505/

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