Пример #1
0
        public static void AddPic(string Path, string Path_syp, string Path_sypf, WaterPosition waterPosition)
        {
            Image    image    = Image.FromFile(Path);
            Image    image2   = Image.FromFile(Path_sypf);
            Graphics graphics = Graphics.FromImage(image);
            int      x        = 0;
            int      y        = 0;

            ImageWater.GetPosition(image, image2, out x, out y, waterPosition);
            graphics.DrawImage(image2, new Rectangle(x, y, image2.Width, image2.Height), 0, 0, image2.Width, image2.Height, GraphicsUnit.Pixel);
            graphics.Dispose();
            image.Save(Path_syp);
            image.Dispose();
        }
Пример #2
0
        public static void AddPic(string filePaths, string waterFile, WaterPosition waterPosition)
        {
            int    num  = filePaths.LastIndexOf(".");
            string strA = filePaths.Substring(num, filePaths.Length - num);

            if (string.Compare(strA, ".gif", true) == 0)
            {
                return;
            }
            int      num2     = 25;
            Image    image    = null;
            Image    image2   = null;
            Graphics graphics = null;

            try
            {
                image    = Image.FromFile(filePaths, true);
                image2   = Image.FromFile(waterFile, true);
                graphics = Graphics.FromImage(image);
                int x = 0;
                int y = 0;
                ImageWater.GetPosition(image, image2, out x, out y, waterPosition);
                float[][] array    = new float[5][];
                float[][] arg_86_0 = array;
                int       arg_86_1 = 0;
                float[]   array2   = new float[5];
                array2[0]          = 1f;
                arg_86_0[arg_86_1] = array2;
                float[][] arg_9D_0 = array;
                int       arg_9D_1 = 1;
                float[]   array3   = new float[5];
                array3[1]          = 1f;
                arg_9D_0[arg_9D_1] = array3;
                float[][] arg_B4_0 = array;
                int       arg_B4_1 = 2;
                float[]   array4   = new float[5];
                array4[2]          = 1f;
                arg_B4_0[arg_B4_1] = array4;
                float[][] arg_C8_0 = array;
                int       arg_C8_1 = 3;
                float[]   array5   = new float[5];
                array5[3]          = (float)num2;
                arg_C8_0[arg_C8_1] = array5;
                array[4]           = new float[]
                {
                    0f,
                    0f,
                    0f,
                    0f,
                    1f
                };
                float[][]       newColorMatrix  = array;
                ColorMatrix     newColorMatrix2 = new ColorMatrix(newColorMatrix);
                ImageAttributes imageAttributes = new ImageAttributes();
                imageAttributes.SetColorMatrix(newColorMatrix2, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
                graphics.DrawImage(image2, new Rectangle(x, y, image2.Width, image2.Height), 0, 0, image2.Width, image2.Height, GraphicsUnit.Pixel, imageAttributes);
                FileInfo    fileInfo = new FileInfo(filePaths);
                ImageFormat format   = ImageFormat.Gif;
                string      key;
                switch (key = fileInfo.Extension.ToLower())
                {
                case ".jpg":
                    format = ImageFormat.Jpeg;
                    break;

                case ".gif":
                    format = ImageFormat.Gif;
                    break;

                case ".png":
                    format = ImageFormat.Png;
                    break;

                case ".bmp":
                    format = ImageFormat.Bmp;
                    break;

                case ".tif":
                    format = ImageFormat.Tiff;
                    break;

                case ".wmf":
                    format = ImageFormat.Wmf;
                    break;

                case ".ico":
                    format = ImageFormat.Icon;
                    break;
                }
                MemoryStream memoryStream = new MemoryStream();
                image.Save(memoryStream, format);
                byte[] array6 = memoryStream.ToArray();
                image.Dispose();
                image2.Dispose();
                graphics.Dispose();
                File.Delete(filePaths);
                FileStream fileStream = new FileStream(filePaths, FileMode.Create, FileAccess.Write);
                if (fileStream != null)
                {
                    fileStream.Write(array6, 0, array6.Length);
                    fileStream.Close();
                }
            }
            finally
            {
                try
                {
                    image2.Dispose();
                    image.Dispose();
                    graphics.Dispose();
                }
                catch
                {
                }
            }
        }
Пример #3
0
        private static void GetPosition(Image image, Image copyImage, out int x, out int y, WaterPosition waterPosition)
        {
            switch (waterPosition)
            {
            case WaterPosition.TOP:
                x = (image.Width - copyImage.Width) / 2;
                y = 0;
                return;

            case WaterPosition.CENTER:
                x = (image.Width - copyImage.Width) / 2;
                y = (image.Height - copyImage.Height) / 2;
                return;

            case WaterPosition.LEFT:
                x = 0;
                y = (image.Height - copyImage.Height) / 2;
                return;

            case WaterPosition.LEFTUPCORNER:
                x = 0;
                y = 0;
                return;

            case WaterPosition.LEFTBOMCORNER:
                x = 0;
                y = image.Height - copyImage.Height;
                return;

            case WaterPosition.RIGHT:
                x = image.Width - copyImage.Width;
                y = (image.Height - copyImage.Height) / 2;
                return;

            case WaterPosition.RIGHTUPCORNER:
                x = image.Width - copyImage.Width;
                y = 0;
                return;

            case WaterPosition.RIGHTBOMCORNER:
                x = image.Width - copyImage.Width;
                y = image.Height - copyImage.Height;
                return;

            case WaterPosition.BOTTOM:
                x = (image.Width - copyImage.Width) / 2;
                y = image.Height - copyImage.Height;
                return;

            default:
                x = image.Width - copyImage.Width;
                y = image.Height - copyImage.Height;
                return;
            }
        }
Пример #4
0
        /// <summary>
        /// 在图片上生成图片水印 create by kouzp 2014-02-13
        /// </summary>
        /// <param name="imagePath">原图片路径</param>
        /// <param name="savePath">加水印后图片保存路径</param>
        /// <param name="waterPicPath">水印图片路径</param>
        /// <param name="position">水印位置</param>
        /// <param name="alpha">水印透明度</param>
        public static void AddWaterPic(string imagePath, string savePath, string waterPicPath, WaterPosition position = WaterPosition.RigthBottom, double alpha = 0.3)
        {
            System.Drawing.Image    image     = System.Drawing.Image.FromFile(imagePath);
            System.Drawing.Image    copyImage = System.Drawing.Image.FromFile(waterPicPath);
            System.Drawing.Graphics g         = System.Drawing.Graphics.FromImage(image);
            g.SmoothingMode = SmoothingMode.AntiAlias;


            //与底图一样,我们需要一个位图来装载水印图片。并设定其分辨率
            Bitmap bmPhoto = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb);
            // 定义一个绘图画面用来装载位图
            Graphics grPhoto = Graphics.FromImage(bmPhoto);

            //同样,由于水印是图片,我们也需要定义一个Image来装载它
            System.Drawing.Image imgWatermark = new Bitmap(waterPicPath);
            grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
            // 第一次描绘,将我们的底图描绘在绘图画面上
            grPhoto.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);

            Bitmap bmWatermark = new Bitmap(bmPhoto);

            bmWatermark.SetResolution(image.HorizontalResolution, image.VerticalResolution);


            // 继续,将水印图片装载到一个绘图画面grWatermark
            Graphics grWatermark = Graphics.FromImage(bmWatermark);

            //ImageAttributes 对象包含有关在呈现时如何操作位图和图元文件颜色的信息。
            ImageAttributes imageAttributes = new ImageAttributes();

            //Colormap: 定义转换颜色的映射
            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 }, // red红色
                new float[] { 0.0f, 1.0f, 0.0f,         0.0f, 0.0f }, //green绿色
                new float[] { 0.0f, 0.0f, 1.0f,         0.0f, 0.0f }, //blue蓝色
                new float[] { 0.0f, 0.0f, 0.0f, (float)alpha, 0.0f }, //透明度
                new float[] { 0.0f, 0.0f, 0.0f,         0.0f, 1.0f }
            };                                                        //

            //  ColorMatrix:定义包含 RGBA 空间坐标的 5 x 5 矩阵。
            //  ImageAttributes 类的若干方法通过使用颜色矩阵调整图像颜色。
            ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);

            imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default,
                                           ColorAdjustType.Bitmap);

            //上面设置完颜色,下面开始设置位置
            int rectX;
            int rectY;

            #region 水印位置
            switch (position)
            {
            case WaterPosition.BottomMiddle:
                rectX = image.Width / 2;
                rectY = image.Height - copyImage.Height - 10;
                break;

            case WaterPosition.Center:
                rectX = image.Width / 2;
                rectY = image.Height / 2;
                break;

            case WaterPosition.LeftBottom:
                rectX = copyImage.Width;
                rectY = image.Height - copyImage.Height - 10;
                break;

            case WaterPosition.LeftTop:
                rectX = copyImage.Width / 2;
                rectY = copyImage.Height / 2;
                break;

            case WaterPosition.RightTop:
                rectX = image.Width - copyImage.Width - 10;
                rectY = copyImage.Height;
                break;

            case WaterPosition.RigthBottom:
                rectX = image.Width - copyImage.Width - 10;
                rectY = image.Height - copyImage.Height - 10;
                break;

            case WaterPosition.TopMiddle:
                rectX = image.Width / 2;
                rectY = copyImage.Width;
                break;

            default:
                rectX = copyImage.Width;
                rectY = image.Height - copyImage.Height - 10;
                break;
            }
            #endregion

            //第二次绘图,把水印印上去
            imgWatermark = new Bitmap(waterPicPath);
            grWatermark.DrawImage(imgWatermark, new Rectangle(rectX, rectY, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel, imageAttributes);
            image = bmWatermark;
            grWatermark.Dispose();
            g.Dispose();
            string        dirPath = savePath.Substring(0, savePath.LastIndexOf('/'));
            DirectoryInfo dir     = new DirectoryInfo(dirPath);
            if (!dir.Exists)
            {
                dir.Create();
            }
            image.Save(savePath);
            image.Dispose();
        }
Пример #5
0
        /// <summary>
        /// 在图片上增加文字水印 create by kouzp 2014-02-13
        /// </summary>
        /// <param name="imagePath">原图片路径</param>
        /// <param name="savePath">加水印后图片保存路径</param>
        /// <param name="waterText">水印文字</param>
        /// <param name="position">水印位置</param>
        /// <param name="alpha">水印透明度</param>
        public static void AddWaterText(string imagePath, string savePath, string waterText = "格男仕", WaterPosition position = WaterPosition.RigthBottom, double alpha = 0.3)
        {
            System.Drawing.Image    image = System.Drawing.Image.FromFile(imagePath);
            System.Drawing.Graphics g     = System.Drawing.Graphics.FromImage(image);

            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.DrawImage(image, 0, 0, image.Width, image.Height);

            //根据图片的大小我们来确定添加上去的文字的大小
            //在这里我们定义一个数组来确定
            int[] sizes = new int[] { 16, 14, 12, 10, 8, 6, 4 };

            //字体
            Font crFont = null;
            //矩形的宽度和高度,SizeF有三个属性,分别为Height高,width宽,IsEmpty是否为空
            SizeF crSize = new SizeF();

            //利用一个循环语句来选择我们要添加文字的型号
            //直到它的长度比图片的宽度小
            for (int i = 0; i < 7; i++)
            {
                crFont = new Font("arial", sizes[i], FontStyle.Bold);

                //测量用指定的 Font 对象绘制并用指定的 StringFormat 对象格式化的指定字符串。
                crSize = g.MeasureString(waterText, crFont);

                // ushort 关键字表示一种整数数据类型
                if ((ushort)crSize.Width < (ushort)image.Width)
                {
                    break;
                }
            }

            //下面定义一个矩形区域,以后在这个矩形里画上白底黑字
            float rectX      = 0;
            float rectY      = 0;
            float rectWidth  = crSize.Width;
            float rectHeight = crSize.Height;

            #region 水印位置
            switch (position)
            {
            case WaterPosition.BottomMiddle:
                rectX = image.Width / 2;
                rectY = image.Height - rectHeight - 10;
                break;

            case WaterPosition.Center:
                rectX = image.Width / 2;
                rectY = image.Height / 2;
                break;

            case WaterPosition.LeftBottom:
                rectX = rectWidth;
                rectY = image.Height - rectHeight - 10;
                break;

            case WaterPosition.LeftTop:
                rectX = rectWidth / 2;
                rectY = rectHeight / 2;
                break;

            case WaterPosition.RightTop:
                rectX = image.Width - rectWidth - 10;
                rectY = rectHeight;
                break;

            case WaterPosition.RigthBottom:
                rectX = image.Width - rectWidth - 10;
                rectY = image.Height - rectHeight - 10;
                break;

            case WaterPosition.TopMiddle:
                rectX = image.Width / 2;
                rectY = rectWidth;
                break;

            default:
                rectX = rectWidth;
                rectY = image.Height - rectHeight - 10;
                break;
            }
            #endregion

            //声明矩形域
            RectangleF textArea   = new RectangleF(rectX, rectY, rectWidth, rectHeight);
            Font       font       = crFont;                                             //定义字体
            int        m_alpha    = Convert.ToInt32(256 * alpha);                       //这个画笔为描绘阴影的画笔,呈灰色
            Brush      whiteBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255)); //笔刷,画文字用
            Brush      blackBrush = new SolidBrush(Color.FromArgb(m_alpha, 0, 0, 0));   //笔刷,画背景用

            //g.FillRectangle(blackBrush, rectX, rectY, rectWidth, rectHeight);//背景
            RectangleF backArea = new RectangleF(rectX + 1, rectY + 1, rectWidth, rectHeight);//背景
            g.DrawString(waterText, font, blackBrush, backArea);
            g.DrawString(waterText, font, whiteBrush, textArea);

            g.Dispose();
            string        dirPath = savePath.Substring(0, savePath.LastIndexOf('/'));
            DirectoryInfo dir     = new DirectoryInfo(dirPath);
            if (!dir.Exists)
            {
                dir.Create();
            }
            image.Save(savePath);
            image.Dispose();
        }
Пример #6
0
 /// <summary>
 /// 图片添加文字水印
 /// </summary>
 /// <param name="image">图片</param>
 /// <param name="text">文字内容</param>
 /// <param name="fontFamily">字体</param>
 /// <param name="emSize">字体大小px</param>
 /// <param name="fontColor">字体颜色,:#ffffff</param>
 /// <param name="position">位置</param>
 /// <param name="opacity">透明度:1-100</param>
 /// <returns></returns>
 public static Image WaterMarkText(Image image, string text, string fontFamily, int emSize, string fontColor, WaterPosition position, int opacity)
 {
     return(AddWaterText(image, text, fontFamily, emSize, fontColor, position, opacity, 0));
 }
Пример #7
0
        /// <summary>
        /// 图片添加水印
        /// </summary>
        /// <param name="image"></param>
        /// <param name="watermark">水印图片</param>
        /// <param name="position">位置</param>
        /// <param name="opacity">透明度。1-100,越小透越透明</param>
        /// <returns></returns>
        public static Image AddWaterPic(Image image, Image watermark, WaterPosition position, int opacity)
        {
            //如果水印图片大于图片,则不添加水印
            if (watermark.Height >= image.Height || watermark.Width >= image.Width)
            {
                return(image);
            }

            using (Graphics g = Graphics.FromImage(image))
            {
                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 transparency = 0.5F;
                if (opacity >= 1 && opacity <= 100)
                {
                    transparency = (opacity / 100.0F);
                }

                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, transparency, 0.0f },
                    new float[] { 0.0f, 0.0f, 0.0f,         0.0f, 1.0f }
                };
                ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
                imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
                int xpos = 0;
                int ypos = 0;
                switch (position)
                {
                case WaterPosition.左上:
                    xpos = (int)(image.Width * (float).01);
                    ypos = (int)(image.Height * (float).01);
                    break;

                case WaterPosition.中上:
                    xpos = ((int)(image.Width * (float).50) - (watermark.Width / 2));
                    ypos = (int)(image.Height * (float).01);
                    break;

                case WaterPosition.右上:
                    xpos = ((int)(image.Width * (float).99) - watermark.Width);
                    ypos = (int)(image.Height * (float).01);
                    break;

                case WaterPosition.左中:
                    xpos = (int)(image.Width * (float).01);
                    ypos = (int)((image.Height * (float).50) - (watermark.Height / 2));
                    break;

                case WaterPosition.中中:
                    xpos = (int)((image.Width * (float).50) - (watermark.Width / 2));
                    ypos = (int)((image.Height * (float).50) - (watermark.Height / 2));
                    break;

                case WaterPosition.右中:
                    xpos = (int)((image.Width * (float).99) - watermark.Width);
                    ypos = (int)((image.Height * (float).50) - (watermark.Height / 2));
                    break;

                case WaterPosition.左下:
                    xpos = (int)(image.Width * (float).01);
                    ypos = (int)((image.Height * (float).99) - watermark.Height);
                    break;

                case WaterPosition.中下:
                    xpos = (int)((image.Width * (float).50) - (watermark.Width / 2));
                    ypos = (int)((image.Height * (float).99) - watermark.Height);
                    break;

                case WaterPosition.右下:
                    xpos = (int)((image.Width * (float).99) - watermark.Width);
                    ypos = (int)((image.Height * (float).99) - watermark.Height);
                    break;
                }
                g.DrawImage(watermark, new Rectangle(xpos, ypos, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes);
            }
            return(image);
        }
Пример #8
0
        /// <summary>
        /// 图片添加文字水印
        /// </summary>
        /// <param name="image">图片</param>
        /// <param name="text">文字内容</param>
        /// <param name="fontFamily">字体</param>
        /// <param name="emSize">字体大小px</param>
        /// <param name="fontColor">字体颜色,:#ffffff</param>
        /// <param name="position">位置</param>
        /// <param name="opacity">透明度:1-100</param>
        /// <param name="rotate">倾斜度 正负180</param>
        /// <returns></returns>
        public static Image AddWaterText(Image image, string text, string fontFamily, int emSize, string fontColor, WaterPosition position, int opacity, int rotate)
        {
            using (Graphics gs = Graphics.FromImage(image))
            {
                //文本格式
                Font  font   = new Font(fontFamily, emSize, FontStyle.Regular, GraphicsUnit.Pixel);
                SizeF crSize = gs.MeasureString(text, font);
                //倾斜度
                gs.RotateTransform(rotate);
                float xpos = 0;
                float ypos = 0;
                switch (position)
                {
                case WaterPosition.左上:
                    xpos = (float)image.Width * (float).01;
                    ypos = (float)image.Height * (float).01;
                    break;

                case WaterPosition.中上:
                    xpos = ((float)image.Width * (float).50) - (crSize.Width / 2);
                    ypos = (float)image.Height * (float).01;
                    break;

                case WaterPosition.右上:
                    xpos = ((float)image.Width * (float).99) - crSize.Width;
                    ypos = (float)image.Height * (float).01;
                    break;

                case WaterPosition.左中:
                    xpos = (float)image.Width * (float).01;
                    ypos = ((float)image.Height * (float).50) - (crSize.Height / 2);
                    break;

                case WaterPosition.中中:
                    xpos = ((float)image.Width * (float).50) - (crSize.Width / 2);
                    ypos = ((float)image.Height * (float).50) - (crSize.Height / 2);
                    break;

                case WaterPosition.右中:
                    xpos = ((float)image.Width * (float).99) - crSize.Width;
                    ypos = ((float)image.Height * (float).50) - (crSize.Height / 2);
                    break;

                case WaterPosition.左下:
                    xpos = (float)image.Width * (float).01;
                    ypos = ((float)image.Height * (float).99) - crSize.Height;
                    break;

                case WaterPosition.中下:
                    xpos = ((float)image.Width * (float).50) - (crSize.Width / 2);
                    ypos = ((float)image.Height * (float).99) - crSize.Height;
                    break;

                case WaterPosition.右下:
                    xpos = ((float)image.Width * (float).99) - crSize.Width;
                    ypos = ((float)image.Height * (float).99) - crSize.Height;
                    break;
                }
                var color = ColorTranslator.FromHtml(fontColor);
                gs.DrawString(text, font, new SolidBrush(Color.FromArgb(opacity / 100 * 255, color)), xpos, ypos);
                return(image);
            }
        }