private void OnUpload(UploadEventArgs args) { UploadEvent handler = MUpload; if (handler != null) { handler(this, args); } }
/// <summary> /// 图片等比缩放 /// </summary> /// <param name="postedFile">原图HttpPostedFile对象</param> /// <param name="targetWidth">指定的最大宽度</param> /// <param name="targetHeight">指定的最大高度</param> /// <param name="watermarkText">水印文字(为""表示不使用水印)</param> /// <param name="watermarkImage">水印图片路径(为""表示不使用水印)</param> public void ZoomAuto(byte[] postedFile, int targetWidth, int targetHeight, string watermarkText, string watermarkImage) { if (postedFile == null) { return; } //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息) var stream = new MemoryStream(postedFile); Image initImage = Image.FromStream(stream, true); //原图宽高均小于模版,不作处理,直接保存 if (initImage.Width <= targetWidth && initImage.Height <= targetHeight) { ////生成新图 ////新建一个bmp图片 //initImage = new Bitmap(initImage.Width, initImage.Height); ////新建一个画板 //Graphics newG = Graphics.FromImage(initImage); ////设置质量 //newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; //newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; ////置背景色 //newG.Clear(Color.White); ////画图 //newG.DrawImage(initImage, new Rectangle(0, 0, initImage.Width, initImage.Height), new Rectangle(0, 0, initImage.Width, initImage.Height), GraphicsUnit.Pixel); //生成新图 //新建一个bmp图片 Image newImage = new Bitmap(initImage.Width, initImage.Height); //新建一个画板 Graphics newG = Graphics.FromImage(newImage); //设置质量 newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //置背景色 newG.Clear(Color.White); //画图 newG.DrawImage(initImage, new Rectangle(0, 0, initImage.Width, initImage.Height), new Rectangle(0, 0, initImage.Width, initImage.Height), GraphicsUnit.Pixel); //文字水印 if (watermarkText != "") { using (Graphics gWater = Graphics.FromImage(initImage)) { var fontWater = new Font("黑体", 10); Brush brushWater = new SolidBrush(Color.White); gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10); gWater.Dispose(); } } //透明图片水印 if (watermarkImage != "") { if (File.Exists(watermarkImage)) { //获取水印图片 using (Image wrImage = GetWatermark(initImage.Width, initImage.Height)) { //水印绘制条件:原始图片宽高均大于或等于水印图片 if (initImage.Width >= wrImage.Width && initImage.Height >= wrImage.Height) { Graphics gWater = Graphics.FromImage(initImage); //透明属性 var imgAttributes = new ImageAttributes(); //var colorMap = new ColorMap // { // OldColor = Color.FromArgb(0, 0, 0, 0), // NewColor = Color.FromArgb(0, 0, 0, 0) // }; //ColorMap[] remapTable = { colorMap }; //imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); float[][] colorMatrixElements = { new[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, new[] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f }, new[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }, new[] { 0.0f, 0.0f, 0.0f, 0.1f, 0.0f }, new[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } }; var wmColorMatrix = new ColorMatrix(colorMatrixElements); imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); gWater.DrawImage(wrImage, new Rectangle(initImage.Width - wrImage.Width, initImage.Height - wrImage.Height, wrImage.Width, wrImage.Height), 0, 0, wrImage.Width, wrImage.Height, GraphicsUnit.Pixel, imgAttributes); gWater.Dispose(); } wrImage.Dispose(); } } } var args = new UploadEventArgs { UploadImage = initImage, FileName = FileName, MidFilepath = MidFilepath }; OnUpload(args); //保存 SavePath = args.SaveFileName; if (!string.IsNullOrWhiteSpace(SavePath)) { if (File.Exists(SavePath)) { File.Delete(SavePath); } initImage.Save(SavePath, ImageFormat.Jpeg); } } else { //缩略图宽、高计算 int newWidth = initImage.Width; int newHeight = initImage.Height; //宽大于高或宽等于高(横图或正方) if (initImage.Width > initImage.Height || initImage.Width == initImage.Height) { //如果宽大于模版 if (initImage.Width > targetWidth) { //宽按模版,高按比例缩放 newWidth = targetWidth; var height = initImage.Height * (targetWidth / Convert.ToDouble(initImage.Width)); newHeight = (int)height; } } //高大于宽(竖图) else { //如果高大于模版 if (initImage.Height > targetHeight) { //高按模版,宽按比例缩放 newHeight = targetHeight; var width = initImage.Width * (targetHeight / initImage.Height); newWidth = width; } } //生成新图 //新建一个bmp图片 Image newImage = new Bitmap(newWidth, newHeight); //新建一个画板 Graphics newG = Graphics.FromImage(newImage); //设置质量 newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //置背景色 newG.Clear(Color.White); //画图 newG.DrawImage(initImage, new Rectangle(0, 0, newImage.Width, newImage.Height), new Rectangle(0, 0, initImage.Width, initImage.Height), GraphicsUnit.Pixel); //文字水印 if (watermarkText != "") { using (var gWater = Graphics.FromImage(newImage)) { var fontWater = new Font("宋体", 10); var brushWater = new SolidBrush(Color.White); gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10); gWater.Dispose(); } } //透明图片水印 if (watermarkImage != "") { if (File.Exists(watermarkImage)) { //获取水印图片 using (Image wrImage = GetWatermark(newWidth, newHeight)) { //水印绘制条件:原始图片宽高均大于或等于水印图片 if (newImage.Width >= wrImage.Width && newImage.Height >= wrImage.Height) { Graphics gWater = Graphics.FromImage(newImage); //透明属性 var imgAttributes = new ImageAttributes(); //ColorMap colorMap = new ColorMap(); //colorMap.OldColor = Color.FromArgb(0, 0, 0, 0); //colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); //ColorMap[] remapTable = { colorMap }; //imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); float[][] colorMatrixElements = { new[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, new[] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f }, new[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }, new[] { 0.0f, 0.0f, 0.0f, 0.1f, 0.0f }, new[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } }; var wmColorMatrix = new ColorMatrix(colorMatrixElements); imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); gWater.DrawImage(wrImage, new Rectangle(newImage.Width - wrImage.Width, newImage.Height - wrImage.Height, wrImage.Width, wrImage.Height), 0, 0, wrImage.Width, wrImage.Height, GraphicsUnit.Pixel, imgAttributes); gWater.Dispose(); } wrImage.Dispose(); } } } stream.Close(); //保存缩略图 var args = new UploadEventArgs { UploadImage = newImage, FileName = FileName, MidFilepath = MidFilepath }; OnUpload(args); SavePath = args.SaveFileName; if (!string.IsNullOrWhiteSpace(SavePath)) { if (File.Exists(SavePath)) { File.Delete(SavePath); } newImage.Save(SavePath, ImageFormat.Jpeg); } //释放资源 newG.Dispose(); newImage.Dispose(); initImage.Dispose(); } }