国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#給圖片添加水印完整實例

2020-01-24 01:20:19
字體:
來源:轉載
供稿:網友

本文實例講述了C#給圖片添加水印的方法。分享給大家供大家參考,具體如下:

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Drawing;using System.IO;using System.Drawing.Imaging;/// <summary>///ImgWater 的摘要說明/// </summary>public class ImgWater{ public ImgWater() {  //  //TODO: 在此處添加構造函數邏輯  // } /// <summary> /// 圖片水印 /// </summary> /// <param name="ImgFile">原圖文件地址</param> /// <param name="WaterImg">水印圖片地址</param> /// <param name="sImgPath">水印圖片保存地址</param> /// <param name="Alpha">水印透明度設置</param> /// <param name="iScale">水印圖片在原圖上的顯示比例</param> /// <param name="intDistance">水印圖片在原圖上的邊距確定,以圖片的右邊和下邊為準,當設定的邊距超過一定大小后參數會自動失效</param> public bool zzsImgWater(   string ImgFile  , string WaterImg  , string sImgPath  , float Alpha  , float iScale  , int intDistance  )  {  try  {   //裝載圖片   FileStream fs = new FileStream(ImgFile, FileMode.Open);   BinaryReader br = new BinaryReader(fs);   byte[] bytes = br.ReadBytes((int)fs.Length);   br.Close();   fs.Close();   MemoryStream ms = new MemoryStream(bytes);   System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);   //System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);   int imgPhotoWidth = imgPhoto.Width;   int imgPhotoHeight = imgPhoto.Height;   System.Drawing.Image imgWatermark = new Bitmap(WaterImg);   int imgWatermarkWidth = imgWatermark.Width;   int imgWatermarkHeight = imgWatermark.Height;   //計算水印圖片尺寸   decimal aScale = Convert.ToDecimal(iScale);   decimal pScale = 0.05M;   decimal MinScale = aScale - pScale;   decimal MaxScale = aScale + pScale;   int imgWatermarkWidthNew = imgWatermarkWidth;   int imgWatermarkHeightNew = imgWatermarkHeight;   if (imgPhotoWidth >= imgWatermarkWidth && imgPhotoHeight >= imgWatermarkHeight && imgPhotoWidth >= imgPhotoHeight)    if (imgWatermarkWidth > imgWatermarkHeight)     if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7) <= MaxScale))      {     }     else      {      imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);      imgWatermarkHeightNew = Convert.ToInt32((imgPhotoWidth * aScale / imgWatermarkWidth) * imgWatermarkHeight);     }    else     if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7) <= MaxScale))     {     }     else      {      imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);      imgWatermarkWidthNew = Convert.ToInt32((imgPhotoHeight * aScale / imgWatermarkHeight) * imgWatermarkWidth);     }   if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgWatermarkWidth >= imgWatermarkHeight)    {    imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);    imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);   }   if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight <= imgPhotoHeight && imgPhotoWidth >= imgPhotoHeight)    {    imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);    imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);   }   if (imgWatermarkWidth <= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgPhotoWidth >= imgPhotoHeight)    {    imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);    imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);   }   if (imgPhotoWidth >= imgWatermarkWidth && imgPhotoHeight >= imgWatermarkHeight && imgPhotoWidth <= imgPhotoHeight)    if (imgWatermarkWidth > imgWatermarkHeight)     if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7) <= MaxScale))      {     }     else      {      imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);      imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);     }    else     if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7) <= MaxScale))      {     }     else      {      imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);      imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);     }   if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgWatermarkWidth <= imgWatermarkHeight)    {    imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);    imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);   }   if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight <= imgPhotoHeight && imgPhotoWidth <= imgPhotoHeight)    {    imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);    imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);   }   if (imgWatermarkWidth <= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgPhotoWidth <= imgPhotoHeight)    {    imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);    imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);   }   //將原圖畫出來   Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);   bmPhoto.SetResolution(72, 72);   Graphics gbmPhoto = Graphics.FromImage(bmPhoto);   gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;   gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;   gbmPhoto.Clear(Color.White);   gbmPhoto.DrawImage(     imgPhoto    , new Rectangle(0, 0, imgPhotoWidth, imgPhotoHeight)    , 0    , 0    , imgPhotoWidth    , imgPhotoHeight    , GraphicsUnit.Pixel    );   Bitmap bmWatermark = new Bitmap(bmPhoto);   bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);   Graphics gWatermark = Graphics.FromImage(bmWatermark);   //指定高質量顯示水印圖片質量   gWatermark.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;   gWatermark.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;    ImageAttributes imageAttributes = new ImageAttributes();   //設置兩種顏色,達到合成效果   ColorMap colorMap = new ColorMap();   colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);   colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);   ColorMap[] remapTable = { colorMap };   imageAttributes.SetRemapTable(remapTable, System.Drawing.Imaging.ColorAdjustType.Bitmap);     //用矩陣設置水印圖片透明度   float[][] colorMatrixElements = {     new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},    new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},    new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},    new float[] {0.0f, 0.0f, 0.0f, Alpha, 0.0f},    new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}   };   System.Drawing.Imaging.ColorMatrix wmColorMatrix = new System.Drawing.Imaging.ColorMatrix(colorMatrixElements);   imageAttributes.SetColorMatrix(wmColorMatrix, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap);   //確定水印邊距   int xPos = imgPhotoWidth - imgWatermarkWidthNew;   int yPos = imgPhotoHeight - imgWatermarkHeightNew;   int xPosOfWm = 0;   int yPosOfWm = 0;   if (xPos > intDistance)    xPosOfWm = xPos - intDistance;   else    xPosOfWm = xPos;   if (yPos > intDistance)    yPosOfWm = yPos - intDistance;   else    yPosOfWm = yPos;   gWatermark.DrawImage(     imgWatermark    , new Rectangle(xPosOfWm, yPosOfWm, imgWatermarkWidthNew, imgWatermarkHeightNew)    , 0    , 0    , imgWatermarkWidth    , imgWatermarkHeight    , GraphicsUnit.Pixel    , imageAttributes    );   imgPhoto = bmWatermark;   //以jpg格式保存圖片   imgPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);   //銷毀對象   gbmPhoto.Dispose();   gWatermark.Dispose();   imgPhoto.Dispose();   imgWatermark.Dispose();   return true;  }  catch  {   return false ;  } } /**//// <summary> /// 文字水印 /// </summary> /// <param name="ImgFile">原圖文件地址</param> /// <param name="TextFont">水印文字</param> /// <param name="sImgPath">文字水印圖片保存地址</param> /// <param name="hScale">高度位置</param> /// <param name="widthFont">文字塊在圖片中所占寬度比例</param> /// <param name="Alpha">文字透明度 其數值的范圍在0到255</param> public bool zzsTextWater(   string ImgFile  , string TextFont  , string sImgPath  , float hScale  , float widthFont  , int Alpha  )  {  try  {   FileStream fs = new FileStream(ImgFile, FileMode.Open);   BinaryReader br = new BinaryReader(fs);   byte[] bytes = br.ReadBytes((int)fs.Length);   br.Close();   fs.Close();   MemoryStream ms = new MemoryStream(bytes);   System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);   //System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);   int imgPhotoWidth = imgPhoto.Width;   int imgPhotoHeight = imgPhoto.Height;   Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);   bmPhoto.SetResolution(72, 72);   Graphics gbmPhoto = Graphics.FromImage(bmPhoto);   gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;   gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;   gbmPhoto.DrawImage(     imgPhoto    , new Rectangle(0, 0, imgPhotoWidth, imgPhotoHeight)    , 0    , 0    , imgPhotoWidth    , imgPhotoHeight    , GraphicsUnit.Pixel    );   //建立字體大小的數組,循環找出適合圖片的水印字體   //int[] sizes = new int[] { 1000, 800, 700, 650, 600, 560, 540, 500, 450, 400, 380, 360, 340, 320, 300, 280, 260, 240, 220, 200, 180, 160, 140, 120, 100, 80, 72, 64, 48, 32, 28, 26, 24, 20, 28, 16, 14, 12, 10, 8, 6, 4, 2 };   int[] sizes = new int[] { 28, 26, 24, 20, 16, 14, 12 };   System.Drawing.Font crFont = null;   System.Drawing.SizeF crSize = new SizeF();   for (int i = 0; i < 7; i++)   {    crFont = new Font("微軟雅黑", sizes[i], FontStyle.Bold);    crSize = gbmPhoto.MeasureString(TextFont, crFont);    if ((ushort)crSize.Width < (ushort)imgPhotoWidth * widthFont)     break;   }   //設置水印字體的位置   //int yPixlesFromBottom = (int)(imgPhotoHeight * hScale);   //float yPosFromBottom = ((imgPhotoHeight - yPixlesFromBottom) - (crSize.Height / 2));   //float xCenterOfImg = (imgPhotoWidth * 1 / 2);   float yPosFromBottom = imgPhotoHeight *0.85f;   float xCenterOfImg = imgPhotoWidth * 0.8f;   //if (xCenterOfImg<crSize.Height)   // xCenterOfImg = (imgPhotoWidth * (1 - (crSize.Height)/ imgPhotoWidth));   System.Drawing.StringFormat StrFormat = new System.Drawing.StringFormat();   StrFormat.Alignment = System.Drawing.StringAlignment.Center;   //   System.Drawing.SolidBrush semiTransBrush2 = new System.Drawing.SolidBrush(Color.FromArgb(Alpha, 0, 0, 0));   gbmPhoto.DrawString(     TextFont    , crFont    , semiTransBrush2    , new System.Drawing.PointF(xCenterOfImg + 1, yPosFromBottom + 1)    , StrFormat    );   System.Drawing.SolidBrush semiTransBrush = new System.Drawing.SolidBrush(Color.FromArgb(Alpha, 255, 255, 255));   //gbmPhoto.FillRectangle(semiTransBrush2, new RectangleF(new PointF(xCenterOfImg - crSize.Width / 2, yPosFromBottom - 4), crSize));   gbmPhoto.DrawString(     TextFont    , crFont    , semiTransBrush    , new System.Drawing.PointF(xCenterOfImg, yPosFromBottom)    , StrFormat    );   bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);   gbmPhoto.Dispose();   imgPhoto.Dispose();   bmPhoto.Dispose();   return true;  }  catch   {   return false;  } } /**//// <summary> /// 文字和Logo圖片水印 /// </summary> /// <param name="ImgFile">原圖文件地址</param> /// <param name="WaterImg">水印圖片地址</param> /// <param name="TextFont">水印文字信息</param> /// <param name="sImgPath">生存水印圖片后的保存地址</param> /// <param name="ImgAlpha">水印圖片的透明度</param> /// <param name="imgiScale">水印圖片在原圖上的顯示比例</param> /// <param name="intimgDistance">水印圖片在原圖上的邊距確定,以圖片的右邊和下邊為準,當設定的邊距超過一定大小后參數會自動失效</param> /// <param name="texthScale">水印文字高度位置,從圖片底部開始計算,0-1</param> /// <param name="textwidthFont">文字塊在圖片中所占寬度比例 0-1</param> /// <param name="textAlpha">文字透明度 其數值的范圍在0到255</param> public void zzsImgTextWater(   string ImgFile  , string WaterImg  , string TextFont  , string sImgPath  , float ImgAlpha  , float imgiScale  , int intimgDistance  , float texthScale  , float textwidthFont  , int textAlpha  )  {  try  {   FileStream fs = new FileStream(ImgFile, FileMode.Open);   BinaryReader br = new BinaryReader(fs);   byte[] bytes = br.ReadBytes((int)fs.Length);   br.Close();   fs.Close();   MemoryStream ms = new MemoryStream(bytes);   System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);   //System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);   int imgPhotoWidth = imgPhoto.Width;   int imgPhotoHeight = imgPhoto.Height;   Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);   bmPhoto.SetResolution(72, 72);   Graphics gbmPhoto = Graphics.FromImage(bmPhoto);   gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;   gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;   gbmPhoto.DrawImage(     imgPhoto    , new Rectangle(0, 0, imgPhotoWidth, imgPhotoHeight)    , 0    , 0    , imgPhotoWidth    , imgPhotoHeight    , GraphicsUnit.Pixel    );   //建立字體大小的數組,循環找出適合圖片的水印字體   int[] sizes = new int[] { 1000, 800, 700, 650, 600, 560, 540, 500, 450, 400, 380, 360, 340, 320, 300, 280, 260, 240, 220, 200, 180, 160, 140, 120, 100, 80, 72, 64, 48, 32, 28, 26, 24, 20, 28, 16, 14, 12, 10, 8, 6, 4, 2 };   System.Drawing.Font crFont = null;   System.Drawing.SizeF crSize = new SizeF();   for (int i = 0; i < 43; i++)   {    crFont = new Font("arial", sizes[i], FontStyle.Bold);    crSize = gbmPhoto.MeasureString(TextFont, crFont);    if ((ushort)crSize.Width < (ushort)imgPhotoWidth * textwidthFont)     break;   }   //設置水印字體的位置   int yPixlesFromBottom = (int)(imgPhotoHeight * texthScale);   float yPosFromBottom = ((imgPhotoHeight - yPixlesFromBottom) - (crSize.Height / 2));   float xCenterOfImg = (imgPhotoWidth * 1 / 2);   System.Drawing.StringFormat StrFormat = new System.Drawing.StringFormat();   StrFormat.Alignment = System.Drawing.StringAlignment.Center;   //   System.Drawing.SolidBrush semiTransBrush2 = new System.Drawing.SolidBrush(Color.FromArgb(textAlpha, 0, 0, 0));   gbmPhoto.DrawString(     TextFont    , crFont    , semiTransBrush2    , new System.Drawing.PointF(xCenterOfImg + 1, yPosFromBottom + 1)    , StrFormat    );   System.Drawing.SolidBrush semiTransBrush = new System.Drawing.SolidBrush(Color.FromArgb(textAlpha, 255, 255, 255));   gbmPhoto.DrawString(     TextFont    , crFont    , semiTransBrush    , new System.Drawing.PointF(xCenterOfImg, yPosFromBottom)    , StrFormat    );   System.Drawing.Image imgWatermark = new Bitmap(WaterImg);   int imgWatermarkWidth = imgWatermark.Width;   int imgWatermarkHeight = imgWatermark.Height;   //計算水印圖片尺寸   decimal aScale = Convert.ToDecimal(imgiScale);   decimal pScale = 0.05M;   decimal MinScale = aScale - pScale;   decimal MaxScale = aScale + pScale;   int imgWatermarkWidthNew = imgWatermarkWidth;   int imgWatermarkHeightNew = imgWatermarkHeight;   if (imgPhotoWidth >= imgWatermarkWidth && imgPhotoHeight >= imgWatermarkHeight && imgPhotoWidth >= imgPhotoHeight)    if (imgWatermarkWidth > imgWatermarkHeight)     if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7) <= MaxScale))     {     }     else     {      imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);      imgWatermarkHeightNew = Convert.ToInt32((imgPhotoWidth * aScale / imgWatermarkWidth) * imgWatermarkHeight);     }    else     if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7) <= MaxScale))     {     }     else     {      imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);      imgWatermarkWidthNew = Convert.ToInt32((imgPhotoHeight * aScale / imgWatermarkHeight) * imgWatermarkWidth);     }   if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgWatermarkWidth >= imgWatermarkHeight)   {    imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);    imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);   }   if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight <= imgPhotoHeight && imgPhotoWidth >= imgPhotoHeight)   {    imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);    imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);   }   if (imgWatermarkWidth <= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgPhotoWidth >= imgPhotoHeight)   {    imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);    imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);   }   if (imgPhotoWidth >= imgWatermarkWidth && imgPhotoHeight >= imgWatermarkHeight && imgPhotoWidth <= imgPhotoHeight)    if (imgWatermarkWidth > imgWatermarkHeight)     if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkWidth) / Convert.ToDecimal(imgPhotoWidth)), 7) <= MaxScale))     {     }     else     {      imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);      imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);     }    else     if ((MinScale <= Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7)) && (Math.Round((Convert.ToDecimal(imgWatermarkHeight) / Convert.ToDecimal(imgPhotoHeight)), 7) <= MaxScale))     {     }     else     {      imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);      imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);     }   if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgWatermarkWidth <= imgWatermarkHeight)   {    imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);    imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);   }   if (imgWatermarkWidth >= imgPhotoWidth && imgWatermarkHeight <= imgPhotoHeight && imgPhotoWidth <= imgPhotoHeight)   {    imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);    imgWatermarkHeightNew = Convert.ToInt32(((imgPhotoWidth * aScale) / imgWatermarkWidth) * imgWatermarkHeight);   }   if (imgWatermarkWidth <= imgPhotoWidth && imgWatermarkHeight >= imgPhotoHeight && imgPhotoWidth <= imgPhotoHeight)   {    imgWatermarkHeightNew = Convert.ToInt32(imgPhotoHeight * aScale);    imgWatermarkWidthNew = Convert.ToInt32(((imgPhotoHeight * aScale) / imgWatermarkHeight) * imgWatermarkWidth);   }   //將原圖畫出來   Bitmap bmWatermark = new Bitmap(bmPhoto);   bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);   Graphics gWatermark = Graphics.FromImage(bmWatermark);   //指定高質量顯示水印圖片質量   gWatermark.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;   gWatermark.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;   System.Drawing.Imaging.ImageAttributes imageAttributes = new System.Drawing.Imaging.ImageAttributes();   //設置兩種顏色,達到合成效果   System.Drawing.Imaging.ColorMap colorMap = new System.Drawing.Imaging.ColorMap();   colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);   colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);   System.Drawing.Imaging.ColorMap[] remapTable = { colorMap };   imageAttributes.SetRemapTable(remapTable, System.Drawing.Imaging.ColorAdjustType.Bitmap);   //用矩陣設置水印圖片透明度   float[][] colorMatrixElements = {     new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},    new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},    new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},    new float[] {0.0f, 0.0f, 0.0f, ImgAlpha, 0.0f},    new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}   };   System.Drawing.Imaging.ColorMatrix wmColorMatrix = new System.Drawing.Imaging.ColorMatrix(colorMatrixElements);   imageAttributes.SetColorMatrix(wmColorMatrix, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap);   //確定水印邊距   int xPos = imgPhotoWidth - imgWatermarkWidthNew;   int yPos = imgPhotoHeight - imgWatermarkHeightNew;   int xPosOfWm = 0;   int yPosOfWm = 0;   if (xPos > intimgDistance)    xPosOfWm = xPos - intimgDistance;   else    xPosOfWm = xPos;   if (yPos > intimgDistance)    yPosOfWm = yPos - intimgDistance;   else    yPosOfWm = yPos;   gWatermark.DrawImage(     imgWatermark    , new Rectangle(xPosOfWm, yPosOfWm, imgWatermarkWidthNew, imgWatermarkHeightNew)    , 0    , 0    , imgWatermarkWidth    , imgWatermarkHeight    , GraphicsUnit.Pixel    , imageAttributes    );   imgPhoto = bmWatermark;   //以jpg格式保存圖片   imgPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);   //銷毀對象   gbmPhoto.Dispose();   gWatermark.Dispose();   bmPhoto.Dispose();   imgPhoto.Dispose();   imgWatermark.Dispose();  }  catch   {  } } /**//// <summary> /// 縮略圖 /// </summary> /// <param name="ImgFile">原圖文件地址</param> /// <param name="sImgPath">縮略圖保存地址</param> /// <param name="ResizeWidth">縮略圖寬度</param> /// <param name="ResizeHeight">縮略圖高度</param> /// <param name="BgColor">縮略圖背景顏色,注意,背景顏色只能指定KnownColor中的值,如blue,red,green等</param> public bool zzsResizeImg( string ImgFile , string sImgPath , int ResizeWidth , int ResizeHeight , string BgColor )  {  try  {   FileStream fs = new FileStream(ImgFile, FileMode.Open);   BinaryReader br = new BinaryReader(fs);   byte[] bytes = br.ReadBytes((int)fs.Length);   br.Close();   fs.Close();   MemoryStream ms = new MemoryStream(bytes);   System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);   //System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);   int imgPhotoWidth = imgPhoto.Width;   int imgPhotoHeight = imgPhoto.Height;   int startX = 0;   int StartY = 0;   int NewWidth = 0;   int NewHeight = 0;   if (imgPhotoWidth >= ResizeWidth && imgPhotoHeight >= ResizeHeight)   {    NewWidth = ResizeWidth;    NewHeight = Convert.ToInt32(imgPhotoHeight * Math.Round(Convert.ToDecimal(ResizeWidth) / Convert.ToDecimal(imgPhotoWidth), 10));    startX = 0;    StartY = (ResizeHeight - NewHeight) / 2;   }   if (ResizeWidth > imgPhotoWidth && ResizeHeight < imgPhotoHeight)   {    NewHeight = ResizeHeight;    NewWidth = Convert.ToInt32(imgPhotoWidth * Math.Round(Convert.ToDecimal(ResizeHeight) / Convert.ToDecimal(imgPhotoHeight), 10));    startX = (ResizeWidth - NewWidth) / 2;    StartY = 0;   }   if (ResizeWidth < imgPhotoWidth && ResizeHeight > imgPhotoHeight)   {    NewWidth = ResizeWidth;    NewHeight = Convert.ToInt32(imgPhotoHeight * Math.Round(Convert.ToDecimal(ResizeWidth) / Convert.ToDecimal(imgPhotoWidth), 10));    startX = 0;    StartY = (ResizeHeight - NewHeight) / 2;   }   if (imgPhotoWidth < ResizeWidth && imgPhotoHeight < ResizeHeight)   {    NewWidth = imgPhotoWidth;    NewHeight = imgPhotoHeight;    startX = (ResizeWidth - imgPhotoWidth) / 2;    StartY = (ResizeHeight - imgPhotoHeight) / 2;   }   //計算縮放圖片尺寸   Bitmap bmPhoto = new Bitmap(ResizeWidth, ResizeHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);   bmPhoto.SetResolution(72, 72);   Graphics gbmPhoto = Graphics.FromImage(bmPhoto);   gbmPhoto.Clear(Color.FromName(BgColor));   gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;   gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;   gbmPhoto.DrawImage(     imgPhoto    , new Rectangle(startX, StartY, NewWidth, NewHeight)    , new Rectangle(0, 0, imgPhotoWidth, imgPhotoHeight)    , GraphicsUnit.Pixel    );   bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);   imgPhoto.Dispose();   gbmPhoto.Dispose();   bmPhoto.Dispose();   ms.Close();   return true;  }  catch   {   return false;  } } /**//// <summary> /// 圖片剪切 /// </summary> /// <param name="ImgFile">原圖文件地址</param> /// <param name="sImgPath">縮略圖保存地址</param> /// <param name="PointX">剪切起始點 X坐標</param> /// <param name="PointY">剪切起始點 Y坐標</param> /// <param name="CutWidth">剪切寬度</param> /// <param name="CutHeight">剪切高度</param> public bool zzsCutImg(string ImgFile, string sImgPath, int PointX, int PointY, int CutWidth, int CutHeight) {  FileStream fs = new FileStream(ImgFile, FileMode.Open);  BinaryReader br = new BinaryReader(fs);  try  {   byte[] bytes = br.ReadBytes((int)fs.Length);   br.Close();   fs.Close();   MemoryStream ms = new MemoryStream(bytes);   System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(ms);   //System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);   //此處只能用filestream,用 System.Drawing.Image則會報多過進程訪問文件的錯誤,會鎖定文件   Bitmap bmPhoto = new Bitmap(CutWidth, CutHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);   bmPhoto.SetResolution(72, 72);   Graphics gbmPhoto = Graphics.FromImage(bmPhoto);   gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;   gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;   gbmPhoto.DrawImage(     imgPhoto    , new Rectangle(0, 0, CutWidth, CutHeight)    , new Rectangle(PointX, PointY, CutHeight, CutHeight)    , GraphicsUnit.Pixel    );   bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);   imgPhoto.Dispose();   gbmPhoto.Dispose();   bmPhoto.Dispose();   ms.Close();   return true;  }  catch  {   return false;  }  finally  {  } }}

希望本文所述對大家C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙坪坝区| 泰安市| 彭泽县| 清丰县| 稻城县| 梅河口市| 克东县| 化州市| 曲阜市| 金寨县| 芦溪县| 台南县| 偏关县| 资阳市| 沐川县| 邮箱| 大安市| 隆安县| 平阳县| 桂林市| 武城县| 乳山市| 乌兰察布市| 东城区| 高州市| 赤峰市| 渭南市| 南乐县| 和静县| 灵川县| 墨玉县| 长丰县| 临洮县| 苏州市| 天津市| 松潘县| 内江市| 高密市| 沧源| 江源县| 苗栗市|