在imageasp.net上编写文本(不影响大小)

本文关键字:影响 文本 net imageasp | 更新日期: 2023-09-27 18:25:49

我创建了一个用于在Image上写入文本的处理程序,该处理程序调用下面编写的函数

private bool HavException { get; set; }
private string ExceptionMessage { get; set; }
public Bitmap SourceImage { get; set; }
public Bitmap DestinationImage { get; set; }
public ImageMethods()
{
    HavException = false;
    ExceptionMessage = string.Empty;
}
public Image AddWatermarkText(Image img, string textOnImage)
{
    try
    {
        textOnImage = ConfigurationManager.AppSettings["textOnImage"];
        var opacity = Int32.Parse(ConfigurationManager.AppSettings["opicity"]);
        var red = Int32.Parse(ConfigurationManager.AppSettings["red"]);
        var green = Int32.Parse(ConfigurationManager.AppSettings["green"]);
        var blue = Int32.Parse(ConfigurationManager.AppSettings["blue"]);
        var fontSize = Int32.Parse(ConfigurationManager.AppSettings["fontSize"]);
        var fontName = ConfigurationManager.AppSettings["fontName"];
        var lobFromImage = Graphics.FromImage(img);
        var lobFont = new Font(fontName, fontSize, FontStyle.Bold);
        var lintTextHw = lobFromImage.MeasureString(textOnImage, lobFont);
        var lintTextOnImageWidth = (int)lintTextHw.Width;
        var lintTextOnImageHeight = (int)lintTextHw.Height;
        var lobSolidBrush = new SolidBrush(Color.FromArgb(opacity, Color.FromArgb(red, green, blue)));
        // lobFromImage.Clear(Color.White);
        lobFromImage.DrawImage(img, img.Height, img.Width);
        var posLeft = (img.Width - lintTextOnImageWidth) / 2;
        posLeft = posLeft > 0 ? posLeft : 5;
        var lobPoint = new Point(posLeft, (img.Height / 2) - (lintTextOnImageHeight / 2));
        //  var lobPoint = new Point(RandomNumber(0, img.Width - lintTextOnImageWidth), RandomNumber(0, img.Height - lintTextOnImageHeight));
        lobFromImage.DrawString(textOnImage, lobFont, lobSolidBrush, lobPoint);
        lobFromImage.Save();
        lobFromImage.Dispose();
        lobSolidBrush.Dispose();
        lobFont.Dispose();
    }
    catch (Exception ex)
    {
        HavException = true;
        ExceptionMessage = ex.Message;
    }
    return img;
}

一切都很好,但图像的大小增加了2到3倍。有没有办法使尺寸不增加太多。我有jpg作为原始图像。

感谢

在imageasp.net上编写文本(不影响大小)

以下调用没有意义,可能是导致图像大小膨胀的罪魁祸首:

lobFromImage.DrawImage(img, img.Height, img.Width);

这将在(高度、宽度)位置绘制原始图像-例如,如果您有200 x 100的图像,则上述调用将在(100200)位置绘制图像,并可能将画布拉伸到300 x 300大小。

对于添加水印,您所需要做的就是绘制文本——所以我猜测,通过删除上面的行可能会奏效。

此外,lobFromImage.Save();看起来很可疑——它将图形的对象状态保存在堆栈上,与将图像保存在磁盘上无关。