亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#給圖片添加水印完整實(shí)例

 更新時(shí)間:2015年12月10日 15:43:16   作者:思齊_  
這篇文章主要介紹了C#給圖片添加水印的方法,以完整實(shí)例形式分析了C#實(shí)現(xiàn)文字及圖像水印、縮略圖、圖片剪切等相關(guān)技巧,需要的朋友可以參考下

本文實(shí)例講述了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: 在此處添加構(gòu)造函數(shù)邏輯
  //
 }
 /// <summary>
 /// 圖片水印
 /// </summary>
 /// <param name="ImgFile">原圖文件地址</param>
 /// <param name="WaterImg">水印圖片地址</param>
 /// <param name="sImgPath">水印圖片保存地址</param>
 /// <param name="Alpha">水印透明度設(shè)置</param>
 /// <param name="iScale">水印圖片在原圖上的顯示比例</param>
 /// <param name="intDistance">水印圖片在原圖上的邊距確定,以圖片的右邊和下邊為準(zhǔn),當(dāng)設(shè)定的邊距超過一定大小后參數(shù)會(huì)自動(dòng)失效</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;
   //計(jì)算水印圖片尺寸
   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);
   //指定高質(zhì)量顯示水印圖片質(zhì)量
   gWatermark.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
   gWatermark.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    ImageAttributes imageAttributes = new ImageAttributes();
   //設(shè)置兩種顏色,達(dá)到合成效果
   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);
     //用矩陣設(shè)置水印圖片透明度
   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);
   //銷毀對(duì)象
   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">文字透明度 其數(shù)值的范圍在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
    );
   //建立字體大小的數(shù)組,循環(huán)找出適合圖片的水印字體
   //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;
   }
   //設(shè)置水印字體的位置
   //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">水印圖片在原圖上的邊距確定,以圖片的右邊和下邊為準(zhǔn),當(dāng)設(shè)定的邊距超過一定大小后參數(shù)會(huì)自動(dòng)失效</param>
 /// <param name="texthScale">水印文字高度位置,從圖片底部開始計(jì)算,0-1</param>
 /// <param name="textwidthFont">文字塊在圖片中所占寬度比例 0-1</param>
 /// <param name="textAlpha">文字透明度 其數(shù)值的范圍在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
    );
   //建立字體大小的數(shù)組,循環(huán)找出適合圖片的水印字體
   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;
   }
   //設(shè)置水印字體的位置
   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;
   //計(jì)算水印圖片尺寸
   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);
   //指定高質(zhì)量顯示水印圖片質(zhì)量
   gWatermark.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
   gWatermark.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
   System.Drawing.Imaging.ImageAttributes imageAttributes = new System.Drawing.Imaging.ImageAttributes();
   //設(shè)置兩種顏色,達(dá)到合成效果
   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);
   //用矩陣設(shè)置水印圖片透明度
   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);
   //銷毀對(duì)象
   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;
   }
   //計(jì)算縮放圖片尺寸
   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">剪切起始點(diǎn) X坐標(biāo)</param>
 /// <param name="PointY">剪切起始點(diǎn) Y坐標(biāo)</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則會(huì)報(bào)多過進(jìn)程訪問文件的錯(cuò)誤,會(huì)鎖定文件
   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
  {
  }
 }
}

希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C#實(shí)現(xiàn)基于IE內(nèi)核的簡單瀏覽器完整實(shí)例

    C#實(shí)現(xiàn)基于IE內(nèi)核的簡單瀏覽器完整實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)基于IE內(nèi)核的簡單瀏覽器,較為詳細(xì)的分析了C#實(shí)現(xiàn)瀏覽器的原理與主要功能實(shí)現(xiàn)方法,并附帶完整實(shí)例供大家下載,需要的朋友可以參考下
    2015-07-07
  • C#實(shí)現(xiàn)Windows Form調(diào)用R進(jìn)行繪圖與顯示的方法

    C#實(shí)現(xiàn)Windows Form調(diào)用R進(jìn)行繪圖與顯示的方法

    眾所周知R軟件功能非常強(qiáng)大,可以很好的進(jìn)行各類統(tǒng)計(jì),并能輸出圖形。下面介紹一種R語言和C#進(jìn)行通信的方法,并將R繪圖結(jié)果顯示到WinForm UI界面上的方法,文中介紹的很詳細(xì),需要的朋友可以參考下。
    2017-02-02
  • 關(guān)于nancy中的身份驗(yàn)證

    關(guān)于nancy中的身份驗(yàn)證

    在nancy中,身份驗(yàn)證分為basic ,form ,token,stateless幾種,basic和form這里不說了,本文重點(diǎn)介紹token驗(yàn)證,需要的朋友一起看看吧
    2015-09-09
  • C#實(shí)現(xiàn)動(dòng)態(tài)生成靜態(tài)頁面的類詳解

    C#實(shí)現(xiàn)動(dòng)態(tài)生成靜態(tài)頁面的類詳解

    這篇文章主要介紹了C#實(shí)現(xiàn)動(dòng)態(tài)生成靜態(tài)頁面的類,結(jié)合實(shí)例形式詳細(xì)分析了C#動(dòng)態(tài)生成靜態(tài)頁面的原理與相關(guān)使用技巧,需要的朋友可以參考下
    2016-04-04
  • 一文帶你了解WPF中的附加事件

    一文帶你了解WPF中的附加事件

    附加事件可用于在非元素類中定義新的 路由事件 ,并在樹中的任何元素上引發(fā)該事件。本文通過簡單的示例為大家講解一下WPF附加事件的用法,需要的可以參考一下
    2022-12-12
  • 詳解C#中普通緩存的使用

    詳解C#中普通緩存的使用

    緩存的概念及優(yōu)缺點(diǎn)在這里就不多做介紹,當(dāng)然緩存包含多種有普通緩存、客戶端緩存、DNS緩存、反向代理緩存以及分布式緩存等等。今天主要聊一聊C#通過編碼來實(shí)現(xiàn)普通的緩存、話不多說直接上代碼。
    2021-05-05
  • C#中CheckedListBox控件的用法實(shí)例

    C#中CheckedListBox控件的用法實(shí)例

    最近用到checklistbox控件,在使用其過程中,花了較多的時(shí)間,這里我收集了其相關(guān)的代碼段,希望對(duì)大家有所幫助,下面這篇文章主要給大家介紹了關(guān)于C#中CheckedListBox控件用法的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • C#數(shù)據(jù)結(jié)構(gòu)揭秘一

    C#數(shù)據(jù)結(jié)構(gòu)揭秘一

    本文一介紹了數(shù)據(jù)結(jié)構(gòu)的基本概念 而介紹了算法的基本概念,并且重點(diǎn)討論了算法時(shí)間復(fù)雜度,并且用程序予以證明
    2012-10-10
  • 幾分鐘搞懂c#之FileStream對(duì)象讀寫大文件(推薦)

    幾分鐘搞懂c#之FileStream對(duì)象讀寫大文件(推薦)

    這篇文章主要介紹了c#之FileStream對(duì)象讀寫大文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • C#使用timer實(shí)現(xiàn)的簡單鬧鐘程序

    C#使用timer實(shí)現(xiàn)的簡單鬧鐘程序

    這篇文章主要介紹了C#使用timer實(shí)現(xiàn)的簡單鬧鐘程序,涉及timer控件的使用及音頻文件的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論