带批注文本/标签的ImageMagick.net背景色始终为黑色
我试图将标签/注释文本(文本的背景颜色是透明的)添加到现有图像中 我尝试了几种不同的方法,但我一直得到黑色的背景色 如果有人能给我指出正确的方向,我将不胜感激 尝试1:带批注文本/标签的ImageMagick.net背景色始终为黑色,imagemagick,magick.net,imagemagick.net,Imagemagick,Magick.net,Imagemagick.net,我试图将标签/注释文本(文本的背景颜色是透明的)添加到现有图像中 我尝试了几种不同的方法,但我一直得到黑色的背景色 如果有人能给我指出正确的方向,我将不胜感激 尝试1: using (var images = new MagickImageCollection()) using (var img = new MagickImage(imgBytes)) { img.Resize(imageDto.Width, imageDto.Height); using (var imgTe
using (var images = new MagickImageCollection())
using (var img = new MagickImage(imgBytes))
{
img.Resize(imageDto.Width, imageDto.Height);
using (var imgText = new MagickImage(MagickColors.None, imageDto.Width, imageDto.Height))
{
var labelSettings = new MagickReadSettings()
{
BackgroundColor = MagickColors.None,
Font = "Arial",
FontPointsize = imageDto.FontSize,
FillColor = MagickColors.Blue,
BorderColor = MagickColors.None,
};
imgText.Read("label:" + imageDto.WatermarkText, labelSettings);
img.Composite(imgText, Gravity.South);
img.Write($"{Guid.NewGuid().ToString()}.png");
return img.ToBase64();
}
}
using (var img = new MagickImage(imgBytes))
{
img.Resize(imageDto.Width, imageDto.Height);
// Load the original image and add it to the collection.
images.Add(img);
// Text label watermark settings
var labelSettings = new MagickReadSettings()
{
BackgroundColor = new MagickColor(MagickColors.Transparent),
Font = "Arial",
FontPointsize = imageDto.FontSize,
FillColor = MagickColors.Blue
};
// Create the label image.
var label = new MagickImage($"label:{imageDto.WatermarkText}", labelSettings);
// Extent the width of the label to match the width of the original image.
label.Extent(img.Width, 0, Gravity.Center);
label.Transparent(MagickColors.Black);
// Add the label to the collection.
images.Add(label);
// Append the images to create the output image.
using (var result = images.AppendVertically())
{
result.Write($"{Guid.NewGuid().ToString()}.png");
return result.ToBase64();
}
}
尝试2:
using (var images = new MagickImageCollection())
using (var img = new MagickImage(imgBytes))
{
img.Resize(imageDto.Width, imageDto.Height);
using (var imgText = new MagickImage(MagickColors.None, imageDto.Width, imageDto.Height))
{
var labelSettings = new MagickReadSettings()
{
BackgroundColor = MagickColors.None,
Font = "Arial",
FontPointsize = imageDto.FontSize,
FillColor = MagickColors.Blue,
BorderColor = MagickColors.None,
};
imgText.Read("label:" + imageDto.WatermarkText, labelSettings);
img.Composite(imgText, Gravity.South);
img.Write($"{Guid.NewGuid().ToString()}.png");
return img.ToBase64();
}
}
using (var img = new MagickImage(imgBytes))
{
img.Resize(imageDto.Width, imageDto.Height);
// Load the original image and add it to the collection.
images.Add(img);
// Text label watermark settings
var labelSettings = new MagickReadSettings()
{
BackgroundColor = new MagickColor(MagickColors.Transparent),
Font = "Arial",
FontPointsize = imageDto.FontSize,
FillColor = MagickColors.Blue
};
// Create the label image.
var label = new MagickImage($"label:{imageDto.WatermarkText}", labelSettings);
// Extent the width of the label to match the width of the original image.
label.Extent(img.Width, 0, Gravity.Center);
label.Transparent(MagickColors.Black);
// Add the label to the collection.
images.Add(label);
// Append the images to create the output image.
using (var result = images.AppendVertically())
{
result.Write($"{Guid.NewGuid().ToString()}.png");
return result.ToBase64();
}
}
两次尝试都会产生相同的黑色背景图像(在文本添加到图像的区域)
.在ImageMagick中,不能在不透明图像上绘制文本或背景的透明度。因此,您必须绘制一个彩色(黑色)矩形,然后用透明填充它,然后将彩色文本绘制到透明图像上。例如,您的图像:
convert image.png \
-draw "translate 250,250 fill black rectangle -50,-50 50,50 \
fill none matte 0,0 floodfill" \
-fill "rgba(255,0,0,1)" -pointsize 20 \
-gravity center -annotate +0+0 "TESTING" \
result.png
补充: 如果你只想要文本,那么省去背景色,只写文本
convert image.png \
-fill "red" -pointsize 20 \
-gravity center -annotate +0+0 "TESTING" \
result.png
在ImageMagick中,不能在不透明图像上绘制文本或背景的透明度。因此,您必须绘制一个彩色(黑色)矩形,然后用透明填充它,然后将彩色文本绘制到透明图像上。例如,您的图像:
convert image.png \
-draw "translate 250,250 fill black rectangle -50,-50 50,50 \
fill none matte 0,0 floodfill" \
-fill "rgba(255,0,0,1)" -pointsize 20 \
-gravity center -annotate +0+0 "TESTING" \
result.png
补充: 如果你只想要文本,那么省去背景色,只写文本
convert image.png \
-fill "red" -pointsize 20 \
-gravity center -annotate +0+0 "TESTING" \
result.png
您的第一种方法可能是最简单的方法。但是您应该使用以下重载:
img.Composite(imgText,Gravity.South,CompositeOperator.Over)
默认值是CompositeOperator。在中,这不是获取标签作为覆盖的方法。您的第一种方法可能是最简单的方法。但是您应该使用以下重载:img.Composite(imgText,Gravity.South,CompositeOperator.Over)
默认值为CompositeOperator。在
中,您不应使用它来获取作为覆盖的标签。在示例图像中,带注释的文本具有白色背景。如何使白色背景透明?这就是我要问的。谢谢白色来自堆栈溢出页面的颜色。它真的是透明的,白色正在透过它显现出来。从堆栈溢出中提取PNG图像并在一些查看器中打开,您将看到它是透明的。我理解您的意思,但我想要的是基础图像的浅灰色可见(不是SO的白色),只是为了重新迭代,我有许多图像,我想应用一些文本,我只想把文字放在上面,并保持基本层。希望我的解释是正确的。请参阅我在上面的答案中添加的内容。在示例图像中,带注释的文本具有白色背景。如何使白色背景透明?这就是我要问的。谢谢白色来自堆栈溢出页面的颜色。它真的是透明的,白色正在透过它显现出来。从堆栈溢出中提取PNG图像并在一些查看器中打开,您将看到它是透明的。我理解您的意思,但我想要的是基础图像的浅灰色可见(不是SO的白色),只是为了重新迭代,我有许多图像,我想应用一些文本,我只想把文字放在上面,并保持基本层。希望我的解释是正确的。请看我的答案上面的补充。