Meme Generation API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Kynareth/src/Extensions/MagickImageExtensions.cs

173 lines
6.5 KiB

using System.Numerics;
using System.Text;
using ImageMagick;
using Kynareth.Models;
namespace Kynareth.Extensions;
public static class MagickImageExtensions
{
public static MagickImage WriteText(this MagickImage image, string text, PositionRect rect, MagickColor fontColor, Encoding encoding, string font = "Impact", int strokeWidth = 2, MagickColor? strokeColor = null, bool wrapText = true, Gravity textGravity = Gravity.Northwest)
{
using var label = new MagickImage($"{(wrapText ? "caption" : "label")}:{text}", new MagickReadSettings()
{
Width = rect.Width,
Height = rect.Height,
BackgroundColor = MagickColors.Transparent,
FillColor = fontColor,
TextGravity = textGravity,
Font = font,
TextEncoding = encoding,
StrokeColor = new MagickColor(strokeColor ?? MagickColors.Black),
StrokeWidth = strokeWidth,
});
image.Composite(label, rect.X, rect.Y, CompositeOperator.Over);
return image;
}
public static MagickImage WriteText(this MagickImage image, string text, PositionRect rect, MagickColor fontColor, Encoding encoding, double fontSize, string font = "Impact", int strokeWidth = 2, MagickColor? strokeColor = null, bool wrapText = true, Gravity textGravity = Gravity.Northwest)
{
using var label = new MagickImage($"{(wrapText ? "caption" : "label")}:{text}", new MagickReadSettings()
{
Width = rect.Width,
Height = rect.Height,
BackgroundColor = MagickColors.Transparent,
FillColor = fontColor,
TextGravity = textGravity,
FontPointsize = fontSize,
Font = font,
TextEncoding = encoding,
StrokeColor = new MagickColor(strokeColor ?? MagickColors.Black),
StrokeWidth = strokeWidth
});
image.Composite(label, rect.X, rect.Y, CompositeOperator.Over);
return image;
}
public static MagickImage WriteText(this MagickImage image, string text, Vector2 position, MagickColor fontColor, Encoding encoding, string font = "Impact", int strokeWidth = 2, MagickColor? strokeColor = null, bool wrapText = true, Gravity textGravity = Gravity.Northwest)
{
using var label = new MagickImage($"{(wrapText ? "caption" : "label")}:{text}", new MagickReadSettings()
{
Width = image.Width,
Height = image.Height,
BackgroundColor = MagickColors.Transparent,
FillColor = fontColor,
TextGravity = textGravity,
Font = font,
TextEncoding = encoding,
StrokeColor = new MagickColor(strokeColor ?? MagickColors.Black),
StrokeWidth = strokeWidth
});
image.Composite(label, (int)position.X, (int)position.Y, CompositeOperator.Over);
return image;
}
public static MagickImage WriteText(this MagickImage image, string text, Vector2 position, MagickColor fontColor, Encoding encoding, double fontSize, string font = "Impact", int strokeWidth = 2, MagickColor? strokeColor = null, bool wrapText = true, Gravity textGravity = Gravity.Northwest)
{
using var label = new MagickImage($"{(wrapText ? "caption" : "label")}:{text}", new MagickReadSettings()
{
Width = image.Width,
Height = image.Height,
BackgroundColor = MagickColors.Transparent,
FillColor = fontColor,
TextGravity = textGravity,
FontPointsize = fontSize,
Font = font,
TextEncoding = encoding,
StrokeColor = new MagickColor(strokeColor ?? MagickColors.Black),
StrokeWidth = strokeWidth
});
image.Composite(label, (int)position.X, (int)position.Y, CompositeOperator.Over);
return image;
}
public static MagickImage WriteText(this MagickImage image, string text, PointD position, MagickColor fontColor, Encoding encoding, string font = "Impact", int strokeWidth = 2, MagickColor? strokeColor = null, bool wrapText = true, Gravity textGravity = Gravity.Northwest)
{
using var label = new MagickImage($"{(wrapText ? "caption" : "label")}:{text}", new MagickReadSettings()
{
Width = image.Width,
Height = image.Height,
BackgroundColor = MagickColors.Transparent,
FillColor = fontColor,
TextGravity = textGravity,
Font = font,
TextEncoding = encoding,
StrokeColor = new MagickColor(strokeColor ?? MagickColors.Black),
StrokeWidth = strokeWidth
});
image.Composite(label, (int)position.X, (int)position.Y, CompositeOperator.Over);
return image;
}
public static MagickImage WriteText(this MagickImage image, string text, PointD position, MagickColor fontColor, Encoding encoding, double fontSize, string font = "Impact", int strokeWidth = 2, MagickColor? strokeColor = null, bool wrapText = true, Gravity textGravity = Gravity.Northwest)
{
using var label = new MagickImage($"{(wrapText ? "caption" : "label")}:{text}", new MagickReadSettings()
{
Width = image.Width,
Height = image.Height,
BackgroundColor = MagickColors.Transparent,
FillColor = fontColor,
TextGravity = textGravity,
FontPointsize = fontSize,
Font = font,
TextEncoding = encoding,
StrokeColor = new MagickColor(strokeColor ?? MagickColors.Black),
StrokeWidth = strokeWidth
});
image.Composite(label, (int)position.X, (int)position.Y, CompositeOperator.Over);
return image;
}
public static MagickImage WriteText(this MagickImage image, string text, int x, int y, MagickColor fontColor, Encoding encoding, string font = "Impact", int strokeWidth = 2, MagickColor? strokeColor = null, bool wrapText = true, Gravity textGravity = Gravity.Northwest)
{
using var label = new MagickImage($"{(wrapText ? "caption" : "label")}:{text}", new MagickReadSettings()
{
Width = image.Width,
Height = image.Height,
BackgroundColor = MagickColors.Transparent,
FillColor = fontColor,
TextGravity = textGravity,
Font = font,
TextEncoding = encoding,
StrokeColor = new MagickColor(strokeColor ?? MagickColors.Black),
StrokeWidth = strokeWidth
});
image.Composite(label, x, y, CompositeOperator.Over);
return image;
}
public static MagickImage WriteText(this MagickImage image, string text, int x, int y, MagickColor fontColor, Encoding encoding, double fontSize, string font = "Impact", int strokeWidth = 2, MagickColor? strokeColor = null, bool wrapText = true, Gravity textGravity = Gravity.Northwest)
{
using var label = new MagickImage($"{(wrapText ? "caption" : "label")}:{text}", new MagickReadSettings()
{
Width = image.Width,
Height = image.Height,
BackgroundColor = MagickColors.Transparent,
FillColor = fontColor,
TextGravity = textGravity,
FontPointsize = fontSize,
Font = font,
TextEncoding = encoding,
StrokeColor = new MagickColor(strokeColor ?? MagickColors.Black),
StrokeWidth = strokeWidth
});
image.Composite(label, x, y, CompositeOperator.Over);
return image;
}
}