C#asp.net 图片设置透明水印

C#asp.net_图片设置透明水印


后台代码:


    public void BuildWatermark(string rSrcImgPath, string rMarkImgPath, string rMarkText, string rDstImgPath)
    {

        System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(rSrcImgPath);
        int phWidth = imgPhoto.Width;
        int phHeight = imgPhoto.Height;
        Bitmap bmPhoto = new Bitmap(phWidth, phHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
        bmPhoto.SetResolution(72, 72);
        Graphics grPhoto = Graphics.FromImage(bmPhoto);

        System.Drawing.Image imgWatermark = new Bitmap(rMarkImgPath);
        int wmWidth = imgWatermark.Width;
        int wmHeight = imgWatermark.Height;

        grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
        grPhoto.DrawImage(
             imgPhoto,
             new Rectangle(0, 0, phWidth, phHeight),
             0,
             0,
             phWidth,
             phHeight,
             GraphicsUnit.Pixel);

        int[] sizes = new int[] { 26, 24, 22, 20, 18, 16, 14 };   ////  这里是 给 文字水印设置 字体大小
        Font crFont = null;
        SizeF crSize = new SizeF();
        for (int i = 0; i < 7; i++)
        {
            crFont = new Font("arial", sizes[i],
                  FontStyle.Bold);
            crSize = grPhoto.MeasureString(rMarkText,
                  crFont);
            if ((ushort)crSize.Width < (ushort)phWidth)
                break;
        }

        int yPixlesFromBottom = (int)(phHeight * .05);
        float yPosFromBottom = ((phHeight -
             yPixlesFromBottom) - (crSize.Height / 2));
        float xCenterOfImg = (phWidth / 2);
        StringFormat StrFormat = new StringFormat();
        StrFormat.Alignment = StringAlignment.Center;

        SolidBrush semiTransBrush2 =
             new SolidBrush(Color.FromArgb(153, 0, 0, 0));
        grPhoto.DrawString(rMarkText,
             crFont,
             semiTransBrush2,
             new PointF(xCenterOfImg + 1, yPosFromBottom + 1),
             StrFormat);
        SolidBrush semiTransBrush = new SolidBrush(
             Color.FromArgb(153, 255, 255, 255));
        grPhoto.DrawString(rMarkText,
             crFont,
             semiTransBrush,
             new PointF(xCenterOfImg, yPosFromBottom),
             StrFormat);
        //根据前面修改后的照片创建一个Bitmap。把这个Bitmap载入到一个新的Graphic对象。  
        Bitmap bmWatermark = new Bitmap(bmPhoto);
        bmWatermark.SetResolution(
             imgPhoto.HorizontalResolution,
             imgPhoto.VerticalResolution);
        Graphics grWatermark =
             Graphics.FromImage(bmWatermark);

        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,
             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,  0.3f, 0.0f},  
                                                     new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}  
                                                };
        ColorMatrix wmColorMatrix = new
             ColorMatrix(colorMatrixElements);
        imageAttributes.SetColorMatrix(wmColorMatrix,
             ColorMatrixFlag.Default,
             ColorAdjustType.Bitmap);

        int markWidth;
        int markHeight;
        //mark比原来的图宽  
        if (phWidth <= wmWidth)
        {
            markWidth = phWidth - 10;
            markHeight = (markWidth * wmHeight) / wmWidth;
        }
        else if (phHeight <= wmHeight)
        {
            markHeight = phHeight - 10;
            markWidth = (markHeight * wmWidth) / wmHeight;
        }
        else
        {
            markWidth = wmWidth;
            markHeight = wmHeight;
        }
        int xPosOfWm = ((phWidth - markWidth) - 10); //// 这里是 水印图在 原图的边距
        int yPosOfWm = 400;  //// 这里是 水印图在 原图的高度
        grWatermark.DrawImage(imgWatermark,
             new Rectangle(xPosOfWm, yPosOfWm, markWidth,
             markHeight),
             0,
             0,
             wmWidth,
             wmHeight,
             GraphicsUnit.Pixel,
             imageAttributes);

        System.Drawing.Image imgPhoto2 = bmWatermark;
        imgPhoto.Dispose();
        grPhoto.Dispose();
        grWatermark.Dispose();
        imgPhoto2.Save(rDstImgPath, ImageFormat.Jpeg);
        imgPhoto2.Dispose();
      
        imgWatermark.Dispose();
    }  



   




    protected void Button2_Click(object sender, EventArgs e)
    {
       BuildWatermark(Server.MapPath("~/img/A.jpg"), Server.MapPath("~/watermark/logo.png"), "草图溜溜网", Server.MapPath("~/img/A.jpg"));//替换原图


    }
}



之前上传的附件  没有设置好,读取图片没有关闭,现在上面代码修改对了  不然图片被占用



webform
桂ICP备16004754号