MagickImage 创建 100% 透明的软边缘
MagickImage create soft edge that goes into 100% transparent
我的目标是在 任何 图片上创建一个软边框,边缘变成 100% 透明颜色(你不应该能够看到图像的边缘)
这是原始图片:
我找到了这个 (http://www.imagemagick.org/Usage/thumbnails/#rounded):
convert thumbnail.gif -alpha set -virtual-pixel transparent \
-channel A -blur 0x8 -level 50%,100% +channel soft_edge.png
这是我后来制作的:
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% 透明,以便在网络上使用图像时,图像的边缘变得不可见?
试试这个:
convert input.png -bordercolor black -fill white \
\( -clone 0 -colorize 100 -shave 10x10 -border 10x10 -blur 0x10 \) \
-compose copyopacity -composite output.png
C#
using (MagickImage mImage = new MagickImage(image))
{
mImage.Format = MagickFormat.Png;
using (IMagickImage mask = mImage.Clone())
{
mask.Format = MagickFormat.Png;
mask.BorderColor = MagickColors.Black;
mask.Colorize(MagickColors.White, new Percentage(100));
mask.Shave(50, 50);
mask.Border(50, 50);
mask.Blur(0, 10);
mImage.Composite(mask, CompositeOperator.CopyAlpha);
mImage.Write(image);
image.Position = 0;
}
}
编辑:
我会尽量把代码写得更像脚本,这样对我来说很容易。不雅之处请见谅:
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");
这个例子几乎是正确的。它在删除 Composite
操作时起作用。命令行示例转换为:
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");
}
我的目标是在 任何 图片上创建一个软边框,边缘变成 100% 透明颜色(你不应该能够看到图像的边缘)
这是原始图片:
我找到了这个 (http://www.imagemagick.org/Usage/thumbnails/#rounded):
convert thumbnail.gif -alpha set -virtual-pixel transparent \
-channel A -blur 0x8 -level 50%,100% +channel soft_edge.png
这是我后来制作的:
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% 透明,以便在网络上使用图像时,图像的边缘变得不可见?
试试这个:
convert input.png -bordercolor black -fill white \
\( -clone 0 -colorize 100 -shave 10x10 -border 10x10 -blur 0x10 \) \
-compose copyopacity -composite output.png
C#
using (MagickImage mImage = new MagickImage(image))
{
mImage.Format = MagickFormat.Png;
using (IMagickImage mask = mImage.Clone())
{
mask.Format = MagickFormat.Png;
mask.BorderColor = MagickColors.Black;
mask.Colorize(MagickColors.White, new Percentage(100));
mask.Shave(50, 50);
mask.Border(50, 50);
mask.Blur(0, 10);
mImage.Composite(mask, CompositeOperator.CopyAlpha);
mImage.Write(image);
image.Position = 0;
}
}
编辑:
我会尽量把代码写得更像脚本,这样对我来说很容易。不雅之处请见谅:
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");
这个例子几乎是正确的。它在删除 Composite
操作时起作用。命令行示例转换为:
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");
}