下面的代码是我上传图片类,保存的代码
- C# code
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Charset = "utf-8"; HttpPostedFile file = context.Request.Files["Filedata"]; string uploadPath = HttpContext.Current.Server.MapPath(@context.Request["folder"]) + "\\"; if (file != null) { if (!System.IO.Directory.Exists(uploadPath)) { System.IO.Directory.CreateDirectory(uploadPath); } file.SaveAs(uploadPath + file.FileName);//这里是保存在服务器上,我想就在这句之后给图片加水印 string webFilePath = uploadPath + file.FileName; string webFilePath_sy = uploadPath + file.FileName; AddWater(webFilePath, webFilePath_sy); context.Response.Write("1"); } else { context.Response.Write("0"); } } public bool IsReusable { get { return false; } }
下面是我增加水印的代码
- C# code
/// <summary> /// 在图片上增加文字水印 /// </summary> /// <param name="Path">原服务器图片路径</param> /// <param name="Path_sy">生成的带文字水印的图片路径</param> public static void AddWater(string Path, string Path_sy) { string addText = "文字水印"; System.Drawing.Image image = System.Drawing.Image.FromFile(Path); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image); g.DrawImage(image, 0, 0, image.Width, image.Height); System.Drawing.Font f = new System.Drawing.Font("Verdana", 60); System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Green); g.DrawString(addText, f, b, 35, 35); g.Dispose(); image.Save(Path_sy); image.Dispose(); }
在上面上传的时候,在image.Save(Path_sy);这句报错,报错GDI一般性错误!
我想原因是保存的时候,覆盖原图片的问题,可能是原图片没有关闭,在线求解决办法啊!!
------解决方案--------------------------------------------------------
给你一段代码吧 懒的去找你的错误了?
- C# code
/// <summary> /// 添加图片水印 /// </summary> /// <param name="sourcePicture">源图片(绝对路径)</param> /// <param name="targetPicture">生成图片(绝对路径)</param> /// <param name="watermarkPicture">水印图片(绝对路径)</param> /// <param name="watermarkAlpha">水印图片透明度(0.1-1.0数值越小透明度越高)</param> /// <param name="wipeColor">水印图片中要去除的颜色</param> /// <param name="watermarkPosition">水印图片位置(从1-9,1:左上;2:中上;3:右上;4:左中;5:正中;6:右中;7:左下;8:中下;9:右下)</param> public static void MakeImgWatemark(string sourcePicture, string targetPicture, string watermarkPicture, float watermarkAlpha, string wipeColor, int watermarkPosition) { Color m_colorWipeColor = new Color(); try { m_colorWipeColor = ColorTranslator.FromHtml(wipeColor); } catch { return; } if (sourcePicture == string.Empty || targetPicture == string.Empty || watermarkPicture == string.Empty || watermarkAlpha == 0.0 || watermarkPosition < 1 || watermarkPosition > 9) return; string m_sSourceExtension = Path.GetExtension(sourcePicture).ToLower(); string m_sWatermarkExtension = Path.GetExtension(watermarkPicture).ToLower(); if (File.Exists(sourcePicture) == false || File.Exists(watermarkPicture) == false || (m_sSourceExtension != ".gif" && m_sSourceExtension != ".jpg" && m_sSourceExtension != ".png" && m_sSourceExtension != ".bmp") || (m_sWatermarkExtension != ".gif" && m_sWatermarkExtension != ".jpg" && m_sWatermarkExtension != ".png" && m_sWatermarkExtension != ".bmp")) return; System.Drawing.Image m_imgSource = System.Drawing.Image.FromFile(sourcePicture); int m_iSourceWidth = m_imgSource.Width; int m_iSourceHeight = m_imgSource.Height; float m_fHorizontalResolution = m_imgSource.HorizontalResolution; float m_fVerticalResolution = m_imgSource.VerticalResolution; Bitmap m_bmSource = new Bitmap(m_imgSource, m_iSourceWidth, m_iSourceHeight); m_imgSource.Dispose(); m_bmSource.SetResolution(m_fHorizontalResolution, m_fVerticalResolution); m_imgSource.Dispose(); Graphics m_grSource = Graphics.FromImage(m_bmSource); m_grSource.SmoothingMode = SmoothingMode.AntiAlias; m_grSource.DrawImage(m_bmSource, new Rectangle(0, 0, m_iSourceWidth, m_iSourceHeight), 0, 0, m_iSourceWidth, m_iSourceHeight, GraphicsUnit.Pixel); System.Drawing.Image m_imgWatermark = new Bitmap(watermarkPicture); int m_iWatermarkWidth = m_imgWatermark.Width; int m_iWatermarkHeight = m_imgWatermark.Height; Bitmap m_bmWatermark = new Bitmap(m_bmSource); m_bmWatermark.SetResolution(m_fHorizontalResolution, m_fVerticalResolution); Graphics m_grWatermark = Graphics.FromImage(m_bmWatermark); ImageAttributes m_imgAttributes = new ImageAttributes(); ColorMap colorMap = new ColorMap(); colorMap.OldColor = Color.FromArgb(255, m_colorWipeColor); colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); ColorMap[] remapTable = { colorMap }; m_imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); float[][] colorMatrixElements = { new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, // red红色 new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, //green绿色 new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, //blue蓝色 new float[] {0.0f, 0.0f, 0.0f, watermarkAlpha, 0.0f}, //透明度 new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}};// ColorMatrix m_wmColorMatrix = new ColorMatrix(colorMatrixElements); m_imgAttributes.SetColorMatrix(m_wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); int m_iWatermarkX; int m_iWatermarkY; switch (watermarkPosition) { case 1: m_iWatermarkX = 10; m_iWatermarkY = 10; break; case 2: m_iWatermarkX = (m_iSourceWidth - m_iWatermarkWidth) / 2; m_iWatermarkY = 10; break; case 3: m_iWatermarkX = m_iSourceWidth - m_iWatermarkWidth - 10; m_iWatermarkY = 10; break; case 4: m_iWatermarkX = 10; m_iWatermarkY = (m_iSourceHeight - m_iWatermarkHeight) / 2; break; case 5: m_iWatermarkX = (m_iSourceWidth - m_iWatermarkWidth) / 2; m_iWatermarkY = (m_iSourceHeight - m_iWatermarkHeight) / 2; break; case 6: m_iWatermarkX = m_iSourceWidth - m_iWatermarkWidth - 10; m_iWatermarkY = (m_iSourceHeight - m_iWatermarkHeight) / 2; break; case 7: m_iWatermarkX = 10; m_iWatermarkY = m_iSourceHeight - m_iWatermarkHeight - 10; break; case 8: m_iWatermarkX = (m_iSourceWidth - m_iWatermarkWidth) / 2; m_iWatermarkY = m_iSourceHeight - m_iWatermarkHeight - 10; break; case 9: m_iWatermarkX = m_iSourceWidth - m_iWatermarkWidth - 10; m_iWatermarkY = m_iSourceHeight - m_iWatermarkHeight - 10; break; default: m_iWatermarkX = m_iSourceWidth - m_iWatermarkWidth - 10; m_iWatermarkY = m_iSourceHeight - m_iWatermarkHeight - 10; break; } m_grWatermark.DrawImage(m_imgWatermark, new Rectangle(m_iWatermarkX, m_iWatermarkY, m_iWatermarkWidth, m_iWatermarkHeight), 0, 0, m_iWatermarkWidth, m_iWatermarkHeight, GraphicsUnit.Pixel, m_imgAttributes); m_bmSource = m_bmWatermark; m_grSource.Dispose(); m_grWatermark.Dispose(); ImageFormat m_imgformatTarget = ImageFormat.Jpeg; switch (Right(targetPicture, 4).ToLower()) { case ".gif": m_imgformatTarget = ImageFormat.Gif; break; case ".jpg": m_imgformatTarget = ImageFormat.Jpeg; break; case ".png": m_imgformatTarget = ImageFormat.Png; break; case ".bmp": m_imgformatTarget = ImageFormat.Bmp; break; default: m_imgformatTarget = ImageFormat.Jpeg; break; } m_bmSource.Save(targetPicture, m_imgformatTarget); m_bmSource.Dispose(); m_imgWatermark.Dispose(); m_bmWatermark.Dispose(); m_grWatermark.Dispose(); m_grSource.Dispose(); m_imgAttributes.Dispose(); }