我已经创建了一个在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作为原始图像。
谢谢
答案 0 :(得分:1)
以下电话没有意义,可能是影响图片尺寸的罪魁祸首:
lobFromImage.DrawImage(img, img.Height, img.Width);
这将在(高度,宽度)位置绘制原始图像 - 例如,如果您有200 x 100图像,则上面的调用将在(100,200)位置绘制图像,并可能将画布拉伸到300 x 300大小
要添加水印,您需要做的就是绘制文本 - 所以我的猜测是删除上面的行就可以了。
同样lobFromImage.Save();
看起来很可疑 - 它将图形的对象状态保存在堆栈中,并且与将图像保存在磁盘上没有任何关系。