在图像asp.net上写文字(不影响大小)

时间:2012-02-27 06:06:41

标签: c# asp.net

我已经创建了一个在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作为原始图像。

谢谢

1 个答案:

答案 0 :(得分:1)

以下电话没有意义,可能是影响图片尺寸的罪魁祸首:

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

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

要添加水印,您需要做的就是绘制文本 - 所以我的猜测是删除上面的行就可以了。

同样lobFromImage.Save();看起来很可疑 - 它将图形的对象状态保存在堆栈中,并且与将图像保存在磁盘上没有任何关系。