程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#利用原圖和水印圖的重疊簡單實現水印的方法

C#利用原圖和水印圖的重疊簡單實現水印的方法

編輯:關於C語言

本文實例講述了C#利用原圖和水印圖的重疊簡單實現水印的方法。分享給大家供大家參考,具體如下:

圖片操作類

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 /// <summary> /// 獲取一個圖片按等比例縮小後的大小。 /// </summary> /// <param name="maxWidth">需要縮小到的寬度</param> /// <param name="maxHeight">需要縮小到的高度</param> /// <param name="imageOriginalWidth">圖片的原始寬度</param> /// <param name="imageOriginalHeight">圖片的原始高度</param> /// <returns>返回圖片按等比例縮小後的實際大小</returns> public static Size GetNewSize(int maxWidth, int maxHeight, int imageOriginalWidth, int imageOriginalHeight) { double w = 0.0; double h = 0.0; double sw = Convert.ToDouble(imageOriginalWidth); double sh = Convert.ToDouble(imageOriginalHeight); double mw = Convert.ToDouble(maxWidth); double mh = Convert.ToDouble(maxHeight); if (sw < mw && sh < mh) { w = sw; h = sh; } else if ((sw / sh) > (mw / mh)) { w = maxWidth; h = (w * sh) / sw; } else { h = maxHeight; w = (h * sw) / sh; } return new Size(Convert.ToInt32(w), Convert.ToInt32(h)); } /// <summary> /// 對給定的一個圖片(Image對象)生成一個指定大小的縮略圖。 /// </summary> /// <param name="originalImage">原始圖片</param> /// <param name="thumMaxWidth">縮略圖的寬度</param> /// <param name="thumMaxHeight">縮略圖的高度</param> /// <returns>返回縮略圖的Image對象</returns> public static System.Drawing.Image GetThumbNailImage(System.Drawing.Image originalImage, int thumMaxWidth, int thumMaxHeight) { Size thumRealSize = Size.Empty; System.Drawing.Image newImage = originalImage; Graphics graphics = null; try { thumRealSize = GetNewSize(thumMaxWidth, thumMaxHeight, originalImage.Width, originalImage.Height); newImage = new Bitmap(thumRealSize.Width, thumRealSize.Height); graphics = Graphics.FromImage(newImage); graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.Clear(Color.Transparent); graphics.DrawImage(originalImage, new Rectangle(0, 0, thumRealSize.Width, thumRealSize.Height), new Rectangle(0, 0, originalImage.Width, originalImage.Height), GraphicsUnit.Pixel); } catch { } finally { if (graphics != null) { graphics.Dispose(); graphics = null; } } return newImage; } /// <summary> /// 對給定的一個圖片文件生成一個指定大小的縮略圖。 /// </summary> /// <param name="originalImage">圖片的物理文件地址</param> /// <param name="thumMaxWidth">縮略圖的寬度</param> /// <param name="thumMaxHeight">縮略圖的高度</param> /// <returns>返回縮略圖的Image對象</returns> public static System.Drawing.Image GetThumbNailImage(string imageFile, int thumMaxWidth, int thumMaxHeight) { System.Drawing.Image originalImage = null; System.Drawing.Image newImage = null; try { originalImage = System.Drawing.Image.FromFile(imageFile); newImage = GetThumbNailImage(originalImage, thumMaxWidth, thumMaxHeight); } catch { } finally { if (originalImage != null) { originalImage.Dispose(); originalImage = null; } } return newImage; } /// <summary> /// 對給定的一個圖片文件生成一個指定大小的縮略圖,並將縮略圖保存到指定位置。 /// </summary> /// <param name="originalImageFile">圖片的物理文件地址</param> /// <param name="thumbNailImageFile">縮略圖的物理文件地址</param> /// <param name="thumMaxWidth">縮略圖的寬度</param> /// <param name="thumMaxHeight">縮略圖的高度</param> public static void MakeThumbNail(string originalImageFile, string thumbNailImageFile, int thumMaxWidth, int thumMaxHeight) { System.Drawing.Image newImage = GetThumbNailImage(originalImageFile, thumMaxWidth, thumMaxHeight); try { newImage.Save(thumbNailImageFile, ImageFormat.Jpeg); } catch { } finally { newImage.Dispose(); newImage = null; } } /// <summary> /// 將一個圖片的內存流調整為指定大小,並返回調整後的內存流。 /// </summary> /// <param name="originalImageStream">原始圖片的內存流</param> /// <param name="newWidth">新圖片的寬度</param> /// <param name="newHeight">新圖片的高度</param> /// <returns>返回調整後的圖片的內存流</returns> public static MemoryStream ResizeImage(Stream originalImageStream, int newWidth, int newHeight) { MemoryStream newImageStream = null; System.Drawing.Image newImage = Globals.GetThumbNailImage(System.Drawing.Image.FromStream(originalImageStream), newWidth, newHeight); if (newImage != null) { newImageStream = new MemoryStream(); newImage.Save(newImageStream, ImageFormat.Jpeg); } return newImageStream; } /// <summary> /// 將一個內存流保存為磁盤文件。 /// </summary> /// <param name="stream">內存流</param> /// <param name="newFile">目標磁盤文件地址</param> public static void SaveStreamToFile(Stream stream, string newFile) { if (stream == null || stream.Length == 0 || string.IsNullOrEmpty(newFile)) { return; } byte[] buffer = new byte[stream.Length]; stream.Position = 0; stream.Read(buffer, 0, buffer.Length); FileStream fileStream = new FileStream(newFile, FileMode.OpenOrCreate, FileAccess.Write); fileStream.Write(buffer, 0, buffer.Length); fileStream.Flush(); fileStream.Close(); fileStream.Dispose(); } /// <summary> /// 對一個指定的圖片加上圖片水印效果。 /// </summary> /// <param name="imageFile">圖片文件地址</param> /// <param name="waterImage">水印圖片(Image對象)</param> public static void CreateImageWaterMark(string imageFile, System.Drawing.Image waterImage) { if (string.IsNullOrEmpty(imageFile) || !File.Exists(imageFile) || waterImage == null) { return; } System.Drawing.Image originalImage = System.Drawing.Image.FromFile(imageFile); if (originalImage.Width - 10 < waterImage.Width || originalImage.Height - 10 < waterImage.Height) { return; } Graphics graphics = Graphics.FromImage(originalImage); int x = originalImage.Width - waterImage.Width - 10; int y = originalImage.Height - waterImage.Height - 10; int width = waterImage.Width; int height = waterImage.Height; graphics.DrawImage(waterImage, new Rectangle(x, y, width, height), 0, 0, width, height, GraphicsUnit.Pixel); graphics.Dispose(); MemoryStream stream = new MemoryStream(); originalImage.Save(stream, ImageFormat.Jpeg); originalImage.Dispose(); System.Drawing.Image imageWithWater = System.Drawing.Image.FromStream(stream); imageWithWater.Save(imageFile); imageWithWater.Dispose(); } /// <summary> /// 對一個指定的圖片加上文字水印效果。 /// </summary> /// <param name="imageFile">圖片文件地址</param> /// <param name="waterText">水印文字內容</param> public static void CreateTextWaterMark(string imageFile, string waterText) { if (string.IsNullOrEmpty(imageFile) || string.IsNullOrEmpty(waterText) || !File.Exists(imageFile)) { return; } System.Drawing.Image originalImage = System.Drawing.Image.FromFile(imageFile); Graphics graphics = Graphics.FromImage(originalImage); graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; SolidBrush brush = new SolidBrush(Color.FromArgb(153, 255, 255, 255)); Font waterTextFont = new Font("Arial", 16, FontStyle.Regular); SizeF waterTextSize = graphics.MeasureString(waterText, waterTextFont); float x = (float)originalImage.Width - waterTextSize.Width - 10F; float y = (float)originalImage.Height - waterTextSize.Height - 10F; graphics.DrawString(waterText, waterTextFont, brush, x, y); graphics.Dispose(); brush.Dispose(); MemoryStream stream = new MemoryStream(); originalImage.Save(stream, ImageFormat.Jpeg); originalImage.Dispose(); System.Drawing.Image imageWithWater = System.Drawing.Image.FromStream(stream); imageWithWater.Save(imageFile); imageWithWater.Dispose(); } /// <summary> /// 判斷上傳組件是否包含內容。 /// </summary> /// <param name="fileUpload">ASP.Net 2.0標准上傳組件</param> /// <returns>如果數據有效,則返回True,否則返回False</returns> public static bool IsAttachmentValid(FileUpload fileUpload) { if (fileUpload != null && fileUpload.PostedFile != null && !string.IsNullOrEmpty(fileUpload.PostedFile.FileName) && fileUpload.PostedFile.ContentLength > 0) { return true; } return false; } ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public class ImageHelper { #region " 水印存放的相對路徑 " public static string GetLogoPath() { return "/images/logo.png"; ///水印圖路徑 } #endregion #region " 圖片水印 " // <summary> // 在圖片上生成圖片水印,此方法不支持Gif類型的圖片 // </summary> // <param name="Path">原服務器圖片路徑</param> // <param name="Path_syp">生成的帶圖片水印的圖片路徑</param> // <param name="Path_sypf">水印圖片路徑</param> public static void MarkImage(Stream InUploadImagePath, string inLogoImagePath, string InSavePath) { System.Drawing.Image Image = System.Drawing.Image.FromStream(InUploadImagePath); System.Drawing.Image newimage = Image.FromFile(Current.Server.MapPath(inLogoImagePath)); Graphics g = Graphics.FromImage(Image); g.DrawImage(newimage, new Rectangle(Image.Width - newimage.Width, Image.Height - newimage.Height, newimage.Width, newimage.Height), 0, 0, newimage.Width, newimage.Height, GraphicsUnit.Pixel); try { Image.Save(Current.Server.MapPath(InSavePath)); } catch (Exception ex) { } finally { g.Dispose(); Image.Dispose(); newimage.Dispose(); } } #endregion }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved