这篇文章主要介绍了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, 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, 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 
        { 
        } 
    } 
} 
 
 |