C# MagickImage创建100%透明的软边
我的目标是在任何图片上创建一个软边框,边缘变成100%透明的颜色(你应该看不到图像的边缘) 这是原始图像: 我发现这个(): 这就是我做这件事的依据:C# MagickImage创建100%透明的软边,c#,imagemagick.net,C#,Imagemagick.net,我的目标是在任何图片上创建一个软边框,边缘变成100%透明的颜色(你应该看不到图像的边缘) 这是原始图像: 我发现这个(): 这就是我做这件事的依据: var mImage = new MagickImage(image); mImage.Format = MagickFormat.Png; mImage.Alpha(AlphaOption.Set); mImage.VirtualPixelMethod = VirtualPixelMethod.Transparent; var form
var mImage = new MagickImage(image);
mImage.Format = MagickFormat.Png;
mImage.Alpha(AlphaOption.Set);
mImage.VirtualPixelMethod = VirtualPixelMethod.Transparent;
var form = mImage.Clone();
form.Level(new Percentage(50), new Percentage(100),Channels.Alpha);
form.Blur(100, 50,Channels.Alpha);
mImage.Composite(form);
mImage.Write(image);
结果是:
但是,您仍然可以清楚地看到边缘,因此它们不够透明
当我将图像放入Paint.NET时,我看到边缘确实有些透明,但边缘可能只有50%的透明,而不是100%
我尝试过调整水平百分比、模糊度等等,但我似乎无法正确地模糊边缘
如何使边缘100%透明,以便在web上使用图像时图像边缘不可见?尝试以下方法:
convert input.png -bordercolor black -fill white \
\( -clone 0 -colorize 100 -shave 10x10 -border 10x10 -blur 0x10 \) \
-compose copyopacity -composite output.png
C#
编辑:
我会尽量把代码放在一个更像fancy的脚本中,这样对我来说就容易了。如果不优雅,我很抱歉:
var image = new MagickImage("input.jpg");
var mask = image.Clone();
mask.BorderColor = MagickColors.Black;
mask.Colorize(MagickColors.White, new Percentage(100));
mask.Shave(10,10);
mask.Border(10,10);
mask.Blur(0,10);
image.Composite(mask, CompositeOperator.CopyAlpha);
image.Format = MagickFormat.Png;
image.Write("output.png");
这个例子几乎是正确的。当删除
复合
操作时,它会起作用。命令行示例解释为:
using (var image = new MagickImage("thumbnail.gif"))
{
// -alpha set
image.Alpha(AlphaOption.Set);
// -virtual-pixel transparent
image.VirtualPixelMethod = VirtualPixelMethod.Transparent;
// -channel A means that the next operations should only change the alpha channel
// - blur 0x8
image.Blur(0, 8, Channels.Alpha);
// -level 50%,100%
image.Level(new Percentage(50), new Percentage(100), Channels.Alpha);
// +channel cancels only allow operations on the alpha channel.
image.Write("soft_edge.png");
}
我无法将此转换为C。你能帮帮我吗?它不能。如果我使用mask.Write(流),则会得到一个白色图像。如果我执行image.Write(stream),那么我会得到与输入图像相同的图像。还有各种打字错误。您已经编写了maks.Composite而不是mask.Composite,以及MagicksColor.Black而不是MagickColors.BlackUpdate。我忘了将图像的格式更改为.PNG。我现在得到了一些不同的东西。这次我得到了一个黑白图像,有边缘。这些边缘是模糊的(读得更暗),但没有梯度。这就是你必须用作遮罩的图像!我看到您对代码进行了一些更新,我尝试了一下,现在我得到了一个与我用作输入的图像相同的图像。此外如果边缘模糊,但不是渐变,如果添加了渐变,该遮罩将如何导致渐变?
var image = new MagickImage("input.jpg");
var mask = image.Clone();
mask.BorderColor = MagickColors.Black;
mask.Colorize(MagickColors.White, new Percentage(100));
mask.Shave(10,10);
mask.Border(10,10);
mask.Blur(0,10);
image.Composite(mask, CompositeOperator.CopyAlpha);
image.Format = MagickFormat.Png;
image.Write("output.png");
using (var image = new MagickImage("thumbnail.gif"))
{
// -alpha set
image.Alpha(AlphaOption.Set);
// -virtual-pixel transparent
image.VirtualPixelMethod = VirtualPixelMethod.Transparent;
// -channel A means that the next operations should only change the alpha channel
// - blur 0x8
image.Blur(0, 8, Channels.Alpha);
// -level 50%,100%
image.Level(new Percentage(50), new Percentage(100), Channels.Alpha);
// +channel cancels only allow operations on the alpha channel.
image.Write("soft_edge.png");
}