zoukankan      html  css  js  c++  java
  • 给图片添加图片水印[可按位置,水印图上放大缩小]

    /// <summary>
            
    /// 给图片添加图片水印[可按位置,水印图上放大缩小]
            
    /// </summary>
            
    /// <param name="ImgFile">原图文件地址</param>
            
    /// <param name="WaterImg">水印图片地址</param>
            
    /// <param name="sImgPath">水印图片保存地址</param>
            
    /// <param name="Alpha">水印透明度设置</param>
            
    /// <param name="width">水印图片的宽度</param>
            
    /// <param name="height">水印图片的高度</param>
            
    /// <param name="bScale">水印图片是否按比例放大缩小</param>
            
    /// <param name="left">水印图片距左边</param>
            
    /// <param name="top">水印图片距上边</param>
            public static bool ImgWater(string ImgFile, string WaterImg, string sImgPath, float Alpha, int width,int height,bool bScale,int left,int top)//, 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);
                    int imgPhotoWidth = imgPhoto.Width;
                    int imgPhotoHeight = imgPhoto.Height;

                    System.Drawing.Image imgWatermark = new Bitmap(WaterImg);
                    int imgWatermarkWidth = imgWatermark.Width;
                    int imgWatermarkHeight = imgWatermark.Height;

                    ////设置比例
                    if(bScale)
                        height = width * imgWatermarkHeight / imgWatermarkWidth;
                    //int imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
                    
    //int imgWatermarkHeightNew = Convert.ToInt32((imgPhotoWidth * aScale / imgWatermarkWidth) * imgWatermarkHeight);

                    
    //将原图画出来
                    Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                    bmPhoto.SetResolution(7272);
                    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(00, imgPhotoWidth, imgPhotoHeight), 00, 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;
                    System.Drawing.Imaging.ImageAttributes imageAttributes = new System.Drawing.Imaging.ImageAttributes();

                    //设置两种颜色,达到合成效果
                    System.Drawing.Imaging.ColorMap colorMap = new System.Drawing.Imaging.ColorMap();
                    colorMap.OldColor = Color.FromArgb(25502550);
                    colorMap.NewColor = Color.FromArgb(0000);

                    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.0f0.0f},
                       new float[] {0.0f,  1.0f,  0.0f,  0.0f0.0f},
                       new float[] {0.0f,  0.0f,  1.0f,  0.0f0.0f},
                       new float[] {0.0f,  0.0f,  0.0f,  Alpha, 0.0f},
                       new float[] {0.0f,  0.0f,  0.0f,  0.0f1.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 - width;
                    
    //int yPos = imgPhotoHeight - height;
                    
    //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(left, top, width, height), 00, imgWatermarkWidth, imgWatermarkHeight, GraphicsUnit.Pixel, imageAttributes);
                    imgPhoto = bmWatermark;
                    imgPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);

                    //销毁对象
                    gbmPhoto.Dispose();
                    gWatermark.Dispose();

                    imgPhoto.Dispose();
                    imgWatermark.Dispose();

                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
    其它的。
    /// <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">水印图片在原图上的边距确定,以图片的右边和下边为准,当设定的边距超过一定大小后参数会自动失效[0.4f-0.2f]</param>
            public static bool ImgWater(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);
                    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 = Convert.ToInt32(imgPhotoWidth * aScale);
                    int imgWatermarkHeightNew = Convert.ToInt32((imgPhotoWidth * aScale / imgWatermarkWidth) * imgWatermarkHeight);


                    //将原图画出来
                    Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                    bmPhoto.SetResolution(7272);
                    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(00, imgPhotoWidth, imgPhotoHeight), 00, 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;
                    System.Drawing.Imaging.ImageAttributes imageAttributes = new System.Drawing.Imaging.ImageAttributes();

                    //设置两种颜色,达到合成效果
                    System.Drawing.Imaging.ColorMap colorMap = new System.Drawing.Imaging.ColorMap();
                    colorMap.OldColor = Color.FromArgb(25502550);
                    colorMap.NewColor = Color.FromArgb(0000);

                    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.0f0.0f},
                   new float[] {0.0f,  1.0f,  0.0f,  0.0f0.0f},
                   new float[] {0.0f,  0.0f,  1.0f,  0.0f0.0f},
                   new float[] {0.0f,  0.0f,  0.0f,  Alpha, 0.0f},
                   new float[] {0.0f,  0.0f,  0.0f,  0.0f1.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), 00, imgWatermarkWidth, imgWatermarkHeight, GraphicsUnit.Pixel, imageAttributes);

                    imgPhoto = bmWatermark;


                    imgPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);

                    //销毁对象
                    gbmPhoto.Dispose();
                    gWatermark.Dispose();

                    imgPhoto.Dispose();
                    imgWatermark.Dispose();

                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }

            /// <summary>
            
    /// 文字水印
            
    /// </summary>
            
    /// <param name="ImgFile">原图文件地址</param>
            
    /// <param name="TextFont">水印文字</param>
            
    /// <param name="sImgPath">文字水印图片保存地址</param>
            
    /// <param name="Alpha">文字透明度 其数值的范围在0到255</param>
            
    /// <param name="widthFont">文字块在图片中所占宽度比例</param>
            
    /// <param name="hScale">高度位置</param>
            public bool TextWater(string ImgFile, string TextFont, string sImgPath, int Alpha, float widthFont, float hScale)
            {
                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);
                    int imgPhotoWidth = imgPhoto.Width;
                    int imgPhotoHeight = imgPhoto.Height;

                    Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                    bmPhoto.SetResolution(7272);
                    Graphics gbmPhoto = Graphics.FromImage(bmPhoto);
                    gbmPhoto.Clear(Color.FromName("white"));//gif背景色
                    gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                    gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    gbmPhoto.DrawImage(imgPhoto, new Rectangle(00, imgPhotoWidth, imgPhotoHeight), 00, imgPhotoWidth, imgPhotoHeight, GraphicsUnit.Pixel);

                    //建立字体大小的数组,循环找出适合图片的水印字体
                    int[] sizes = new int[] { 100080070065060056054050045040038036034032030028026024022020018016014012010080726448322826242028161412108642 };
                    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 * widthFont)
                            break;
                    }

                    //设置水印字体的位置
                    int yPixlesFromBottom = (int)(imgPhotoHeight * hScale);
                    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(Alpha, 000));
                    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, 255255255));
                    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 (Exception ex)
                {
                    return false;
                }
            }

            /// <summary>
            
    /// 缩略图
            
    /// </summary>
            
    /// <param name="ImgFile">原图文件地址</param>
            
    /// <param name="sImgPath">缩略图保存地址</param>
            
    /// <param name="ResizeWidth">缩略图宽度</param>
            
    /// <param name="ResizeHeight">缩略图高度</param>
            
    /// <param name="BgColor">缩略图背景颜色,注意,背景颜色只能指定KnownColor中的值,如white,blue,red,green等</param>
            public bool ResizeImg(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);
                    int imgPhotoWidth = imgPhoto.Width;
                    int imgPhotoHeight = imgPhoto.Height;
                    int StartX = 0;
                    int StartY = 0;
                    int NewWidth = imgPhotoWidth;
                    int NewHeight = imgPhotoHeight;

                    //计算缩放图片尺寸
                    if (NewWidth > ResizeWidth)
                    {
                        NewWidth = ResizeWidth;
                        NewHeight = Convert.ToInt32(imgPhotoHeight * Math.Round(Convert.ToDecimal(NewWidth) / Convert.ToDecimal(imgPhotoWidth), 10));
                    }

                    if (NewHeight > ResizeHeight)
                    {
                        NewHeight = ResizeHeight;
                        NewWidth = Convert.ToInt32(imgPhotoWidth * Math.Round(Convert.ToDecimal(NewHeight) / Convert.ToDecimal(imgPhotoHeight), 10));
                    }

                    StartX = ResizeWidth - NewWidth;
                    StartY = ResizeHeight - NewHeight;

                    StartX = StartX > 0 ? StartX / 2 : 0;
                    StartY = StartY > 0 ? StartY / 2 : 0;

                    Bitmap bmPhoto = new Bitmap(ResizeWidth, ResizeHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                    bmPhoto.SetResolution(7272);
                    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(00, imgPhotoWidth, imgPhotoHeight), GraphicsUnit.Pixel);
                    bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);

                    imgPhoto.Dispose();
                    gbmPhoto.Dispose();
                    bmPhoto.Dispose();

                    return true;
                }
                catch (Exception err)
                {
                    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 CutImg(string ImgFile, string sImgPath, int PointX, int PointY, int CutWidth, int CutHeight)
            {
                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);
                    
    //此处只能用filestream,用 System.Drawing.Image则会报多过进程访问文件的错误,会锁定文件
                    Bitmap bmPhoto = new Bitmap(CutWidth, CutHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                    bmPhoto.SetResolution(7272);
                    Graphics gbmPhoto = Graphics.FromImage(bmPhoto);
                    gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                    gbmPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

                    gbmPhoto.DrawImage(imgPhoto, new Rectangle(00, CutWidth, CutHeight), new Rectangle(PointX, PointY, CutHeight, CutHeight), GraphicsUnit.Pixel);
                    bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);

                    imgPhoto.Dispose();
                    gbmPhoto.Dispose();
                    bmPhoto.Dispose();

                    return true;
                }
                catch (Exception err)
                {
                    return false;
                }
            }
  • 相关阅读:
    linxu 网络管理
    Linux 命令2
    crontab命令
    Linux 命令
    Linux 命令
    Git命令
    GIT
    Python 修改文件内容
    logging模块
    CSS 选择器
  • 原文地址:https://www.cnblogs.com/bober/p/2224968.html
Copyright © 2011-2022 走看看