/// <summary>
/// 写文字
/// </summary>
/// <param name="imgPhoto">源图</param>
/// <param name="txt">文字</param>
/// <param name="font">字体</param>
/// <param name="color">颜色</param>
/// <param name="point">文字左上角</param>
/// <returns></returns>
public static Image DrawString(Image imgPhoto, string txt, Font font, Color color, PointF point)
{
//与底图一样,我们需要一个位图来装载水印图片。并设定其分辨率
Bitmap bmWatermark = new Bitmap(imgPhoto);
bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
//继续,将水印图片装载到一个绘图画面grWatermark
Graphics grWatermark = Graphics.FromImage(bmWatermark);
SolidBrush semiTransBrush2 = new SolidBrush(color);
//封装文本布局信息(如对齐、文字方向和 Tab 停靠位),显示操作(如省略号插入和国家标准 (National) 数字替换)和 OpenType 功能。
StringFormat StrFormat = new StringFormat();
//定义需要印的文字居中对齐
StrFormat.Alignment = StringAlignment.Near;
grWatermark.DrawString(txt, //string of text
font, //font
semiTransBrush2, //Brush
point, //Position
StrFormat);
grWatermark.Dispose();
imgPhoto.Dispose();
return bmWatermark;
}
/// <summary>
/// 写图片
/// </summary>
/// <param name="imgPhoto">源图</param>
/// <param name="watermark">水印图</param>
/// <param name="point">图片左上角</param>
/// <returns></returns>
public static Image DrawImage(Image imgPhoto, Image watermark, Point point)
{
//与底图一样,我们需要一个位图来装载水印图片。并设定其分辨率
Bitmap bmWatermark = new Bitmap(imgPhoto);
bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
// 获取水印图片的高度和宽度
int wmWidth = watermark.Width;
int wmHeight = watermark.Height;
//继续,将水印图片装载到一个绘图画面grWatermark
Graphics grWatermark = Graphics.FromImage(bmWatermark);
// 第二次绘图,把水印印上去
grWatermark.DrawImage(watermark,
new Rectangle(point.X,
point.Y,
wmWidth,
wmHeight),
0,
0,
wmWidth,
wmHeight,
GraphicsUnit.Pixel);
grWatermark.Dispose();
imgPhoto.Dispose();
return bmWatermark;
}
/// <summary>
/// GDI压缩图片
/// </summary>
/// <param name="bmp">传入参数Bitmap</param>
/// <returns></returns>
public static byte[] ImageGdi(Bitmap bmp)
{
Bitmap xbmp = new Bitmap(bmp);
MemoryStream ms = new MemoryStream();
xbmp.Save(ms, ImageFormat.Jpeg);
byte[] buffer;
ms.Flush();
if (ms.Length > 95000)
{
//buffer = ms.GetBuffer();
double new_width = 0;
double new_height = 0;
Image m_src_image = Image.FromStream(ms);
if (m_src_image.Width >= m_src_image.Height)
{
new_width = 1024;
new_height = new_width * m_src_image.Height / (double)m_src_image.Width;
}
else if (m_src_image.Height >= m_src_image.Width)
{
new_height = 768;
new_width = new_height * m_src_image.Width / (double)m_src_image.Height;
}
Bitmap bbmp = new Bitmap((int)new_width, (int)new_height, m_src_image.PixelFormat);
Graphics m_graphics = Graphics.FromImage(bbmp);
m_graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
m_graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
m_graphics.DrawImage(m_src_image, 0, 0, bbmp.Width, bbmp.Height);
ms = new MemoryStream();
bbmp.Save(ms, ImageFormat.Jpeg);
buffer = ms.GetBuffer();
ms.Close();
return buffer;
}
else
{
buffer = ms.GetBuffer();
ms.Close();
return buffer;
}
}