如何使用Magick ++为具有透明背景的png图像设置不透明度
How to set opacity to png image with transparent background using Magick++
我正在使用 ImageMagick 渲染图像。
我打开 png file as Magick::Image and draw it on another Magick::Image and set opacity to png image. And save it as jpg file.
在保存的文件中,透明背景变为黑色。
示例代码:
Image newImage;
newImage.size(Geometry(1000, 1000));
newImage.fillColor(Color(50, TransparentOpacity / 2, 50));
newImage.draw(DrawableRectangle(0, 0, 1000, 1000));
Image originalImage("test-Image-1.png");
originalImage.opacity(TransparentOpacity / 2);
newImage.composite( originalImage, 300, 100, AtopCompositeOp );
newImage.magick("JPG");
newImage.write("testImage3.jpg");
是否可以将图像透明度设置为 50%,背景完全透明?
问题在于行:
originalImage.opacity(TransparentOpacity / 2);
来源 "test-Image-1.png" 的 alpha 通道看起来像...
当您将不透明度设置为 50% 时,您设置的是整个通道,而不是将级别降低 50%。用 originalImage.opacity
改变的 alpha 通道现在看起来像这样...
有很多方法可以改变 alpha 通道以减少 图像不透明度。 Pixel iteration, FX, and level color 仅举几例。我喜欢隔离 alpha 通道、改变级别并将通道复制回图像。下面的示例只是 "swaps" 颜色值作为 50% 不透明度 == gray50
.
Image originalImage("test-Image-1.png");
Image mask(originalImage); // Clone image
mask.channel(OpacityChannel); // Isolate alpha-channel
/*
For this example I'll mimic CLI options:
"-fuzz 50% -fill gray50 -opaque black"
*/
mask.colorFuzz(MaxRGB * 0.5);
mask.opaque(Color("black"), Color("gray50"));
mask.negate();
// Copy mask image as new alpha-channel
originalImage.composite( mask, 0, 0, CopyOpacityCompositeOp );
现在您可以在另一张图片上进行合成而不用担心黑色背景。
我正在使用 ImageMagick 渲染图像。 我打开 png file as Magick::Image and draw it on another Magick::Image and set opacity to png image. And save it as jpg file.
在保存的文件中,透明背景变为黑色。
示例代码:
Image newImage;
newImage.size(Geometry(1000, 1000));
newImage.fillColor(Color(50, TransparentOpacity / 2, 50));
newImage.draw(DrawableRectangle(0, 0, 1000, 1000));
Image originalImage("test-Image-1.png");
originalImage.opacity(TransparentOpacity / 2);
newImage.composite( originalImage, 300, 100, AtopCompositeOp );
newImage.magick("JPG");
newImage.write("testImage3.jpg");
是否可以将图像透明度设置为 50%,背景完全透明?
问题在于行:
originalImage.opacity(TransparentOpacity / 2);
来源 "test-Image-1.png" 的 alpha 通道看起来像...
当您将不透明度设置为 50% 时,您设置的是整个通道,而不是将级别降低 50%。用 originalImage.opacity
改变的 alpha 通道现在看起来像这样...
有很多方法可以改变 alpha 通道以减少 图像不透明度。 Pixel iteration, FX, and level color 仅举几例。我喜欢隔离 alpha 通道、改变级别并将通道复制回图像。下面的示例只是 "swaps" 颜色值作为 50% 不透明度 == gray50
.
Image originalImage("test-Image-1.png");
Image mask(originalImage); // Clone image
mask.channel(OpacityChannel); // Isolate alpha-channel
/*
For this example I'll mimic CLI options:
"-fuzz 50% -fill gray50 -opaque black"
*/
mask.colorFuzz(MaxRGB * 0.5);
mask.opaque(Color("black"), Color("gray50"));
mask.negate();
// Copy mask image as new alpha-channel
originalImage.composite( mask, 0, 0, CopyOpacityCompositeOp );
现在您可以在另一张图片上进行合成而不用担心黑色背景。