程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#給圖片添加水印完全實例

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

編輯:C#入門知識

C#給圖片添加水印完全實例。本站提示廣大學習愛好者:(C#給圖片添加水印完全實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#給圖片添加水印完全實例正文


本文實例講述了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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved