コード例 #1
0
        /// <summary>
        /// 单个水印操作
        /// </summary>
        /// <param name="waterMark"></param>
        private static void DIVWaterMark(WaterMark waterMark)
        {
            #region 必须参数获取

            //图片路径
            const string filePath = @"D:\Pictures\2.jpg";
            //文件名
            string fileName = Path.GetFileNameWithoutExtension(filePath);
            //图片所处目录
            string dirPath = Path.GetDirectoryName(filePath);
            //存放目录
            string savePath = dirPath + "\\DNTWaterMark";
            //是否存在,不存在就创建
            if (!Directory.Exists(savePath))
            {
                Directory.CreateDirectory(savePath);
            }

            #endregion

            #region 水印操作

            Image successImage = WaterMarkHelper.SetWaterMark(filePath, waterMark);
            if (successImage != null)
            {
                //保存图片(不管打不打开都保存)
                successImage.Save(savePath + "\\" + fileName + ".png", System.Drawing.Imaging.ImageFormat.Png);
            }
            else
            {
                Console.WriteLine("水印失败!请检查原图和水印图!");
            }

            #endregion
        }
コード例 #2
0
        /// <summary>
        /// 水印处理-文字转图片
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        private static Image TextToImager(WaterMark model)
        {
            Font     f       = new Font(model.FontFamily, model.FontSize, model.FontStyle);
            Bitmap   fbitmap = new Bitmap(Encoding.GetEncoding("GBK").GetByteCount(model.Text) / 2 * f.Height, f.Height);
            Graphics gh      = Graphics.FromImage(fbitmap);//创建一个画板;

            gh.SmoothingMode = SmoothingMode.AntiAlias;
            gh.DrawString(model.Text, f, model.BrushesColor, 0, 0);//画字符串
            return(fbitmap as Image);
        }
コード例 #3
0
        /// <summary>
        /// 图片水印预设
        /// </summary>
        /// <returns></returns>
        private static WaterMark WaterMarkImage()
        {
            var waterMark = new WaterMark
            {
                WaterMarkType     = WaterMarkTypeEnum.Image,
                ImgPath           = @"D:\Pictures\1.jpg",
                WaterMarkLocation = WaterMarkLocationEnum.CenterCenter,
                Transparency      = 1f
            };

            return(waterMark);
        }
コード例 #4
0
        /// <summary>
        /// 水印位置
        /// </summary>
        /// <param name="model"></param>
        /// <param name="imgSource"></param>
        /// <param name="markImg"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        private static void WaterMarkLocations(WaterMark model, Image imgSource, Image markImg, out int x, out int y)
        {
            x = 0;
            y = 0;
            switch (model.WaterMarkLocation)
            {
            case WaterMarkLocationEnum.TopLeft:
                x = 0;
                y = 0;
                break;

            case WaterMarkLocationEnum.TopCenter:
                x = imgSource.Width / 2 - markImg.Width / 2;
                y = 0;
                break;

            case WaterMarkLocationEnum.TopRight:
                x = imgSource.Width - markImg.Width;
                y = 0;
                break;

            case WaterMarkLocationEnum.CenterLeft:
                x = 0;
                y = imgSource.Height / 2 - markImg.Height / 2;
                break;

            case WaterMarkLocationEnum.CenterCenter:
                x = imgSource.Width / 2 - markImg.Width / 2;
                y = imgSource.Height / 2 - markImg.Height / 2;
                break;

            case WaterMarkLocationEnum.CenterRight:
                x = imgSource.Width - markImg.Width;
                y = imgSource.Height / 2 - markImg.Height / 2;
                break;

            case WaterMarkLocationEnum.BottomLeft:
                x = 0;
                y = imgSource.Height - markImg.Height;
                break;

            case WaterMarkLocationEnum.BottomCenter:
                x = imgSource.Width / 2 - markImg.Width / 2;
                y = imgSource.Height - markImg.Height;
                break;

            case WaterMarkLocationEnum.BottomRight:
                x = imgSource.Width - markImg.Width;
                y = imgSource.Height - markImg.Height;
                break;
            }
        }
コード例 #5
0
        private static void Main(string[] args)
        {
            //SentimentClassify();
            //var result = GenericFunction.Get<string>(2, "2");
            //Console.WriteLine(result.GetType());
            //var liupengSon = new Son();
            //liupengSon.UserName = "******";
            //liupengSon.BuildHouse();
            //liupengSon.ShowSkill();

            //int num = 1;
            //long numLong = 2;
            //string str = "";
            //float numFloat = 1.5f;
            //double numDouble = 1.3;
            //decimal numDecimal = 2.5M;
            //object obj  = "";
            //bool numBool = true;


            //var userName = "******";
            //运算符+、-、*、/,

            //var numOne = 2;
            //var numThree = numOne --;
            //numThree += numOne;
            //numThree = numThree + numOne;
            //numThree -= numOne;
            //numThree = numThree - numOne;
            ////Console.WriteLine(numTwo);
            //Console.WriteLine(numOne);
            //Console.WriteLine(numThree);


            //var startDate = Convert.ToDateTime(DateTime.Now.ToShortDateString()).AddDays(-7);
            //var endDate = Convert.ToDateTime(DateTime.Now.ToShortDateString());

            //Console.WriteLine(string.Format("开始日期是:{0};结束日期是:{1}", startDate, endDate));

            //Image img1 = Image.FromFile(@"D:\Pictures\1.jpg");
            ////Image img2 = Image.FromFile(@"D:\Pictures\2.jpg");
            //Image img = ImageMergeHelper.ImgMerge(620, 600, 10, null,
            //    new Image[] { img1 });
            //img.Save(@"D:\Pictures\allinone.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

            WaterMark waterMark = WaterMarkImage();

            DIVWaterMark(waterMark);
            Console.WriteLine("合成图片成功!");
            Console.ReadKey();
        }
コード例 #6
0
        /// <summary>
        /// 水印文字预设
        /// </summary>
        /// <returns></returns>
        private static WaterMark WaterMarkFont()
        {
            WaterMark waterMark = new WaterMark();

            waterMark.WaterMarkType     = WaterMarkTypeEnum.Text;
            waterMark.Transparency      = 0.7f;
            waterMark.Text              = "dunitian.cnblogs.com";
            waterMark.FontStyle         = System.Drawing.FontStyle.Bold;
            waterMark.FontFamily        = "Consolas";
            waterMark.FontSize          = 20f;
            waterMark.BrushesColor      = System.Drawing.Brushes.Black;
            waterMark.WaterMarkLocation = WaterMarkLocationEnum.CenterCenter;
            return(waterMark);
        }
コード例 #7
0
        /// <summary>
        /// 设置水印
        /// </summary>
        /// <param name="imgPath"></param>
        /// <param name="model"></param>
        /// <returns></returns>
        public static Image SetWaterMark(string imgPath, WaterMark model)
        {
            //获取背景图
            Image imgSource = Image.FromFile(imgPath);
            //获取水印图片
            Image markImg = null;

            //水印检验(文字,图片[路径下是否存在图片])
            #region 水印校验+水印处理
            if (model == null)
            {
                return(null);
            }
            //看看原图是否存在
            if (!System.IO.File.Exists(imgPath))
            {
                return(null);
            }
            //根据水印类型校验+水印处理
            switch (model.WaterMarkType)
            {
            case WaterMarkTypeEnum.Text:
                if (string.IsNullOrEmpty(model.Text))
                {
                    return(null);
                }
                else
                {
                    markImg = TextToImager(model);    //水印处理-如果是文字就转换成图片
                }
                break;

            case WaterMarkTypeEnum.Image:
                if (!System.IO.File.Exists(model.ImgPath))
                {
                    return(null);
                }
                else
                {
                    //获得水印图像
                    markImg = Image.FromFile(model.ImgPath);
                }
                break;

            case WaterMarkTypeEnum.NoneMark:
                return(imgSource);
            }
            #endregion

            #region 创建颜色矩阵
            //创建颜色矩阵
            float[][] ptsArray =
            {
                new float[] { 1, 0, 0,                  0, 0 },
                new float[] { 0, 1, 0,                  0, 0 },
                new float[] { 0, 0, 1,                  0, 0 },
                new float[] { 0, 0, 0, model.Transparency, 0 },                //注意:0.0f为完全透明,1.0f为完全不透明
                new float[] { 0, 0, 0,                  0, 1 }
            };
            ColorMatrix colorMatrix = new ColorMatrix(ptsArray);
            //新建一个Image属性
            ImageAttributes imageAttributes = new ImageAttributes();
            //将颜色矩阵添加到属性
            imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Default);
            #endregion

            //原图格式检验+水印
            #region 原图格式检验+水印

            //判断是否是索引图像格式
            if (imgSource.PixelFormat == PixelFormat.Format1bppIndexed || imgSource.PixelFormat == PixelFormat.Format4bppIndexed || imgSource.PixelFormat == PixelFormat.Format8bppIndexed)
            {
                #region 索引图片,转成位图再加图片
                //转成位图,这步很重要
                Bitmap   bitmap  = new Bitmap(imgSource.Width, imgSource.Height);
                Graphics graphic = Graphics.FromImage(bitmap);

                #region 缩放处理
                //如果原图小于水印图片 等比缩放水印图
                if (markImg.Width >= imgSource.Width || markImg.Height >= imgSource.Height)
                {
                    markImg = ImageShrink(imgSource, markImg);
                }
                #endregion

                #region 水印位置
                //水印位置
                int x;
                int y;
                WaterMarkLocations(model, imgSource, markImg, out x, out y);
                #endregion

                //将原图画在位图上
                graphic.DrawImage(imgSource, new Point(0, 0));

                //将水印加在位图上
                graphic.DrawImage(markImg, new Rectangle(x, y, markImg.Width, markImg.Height), 0, 0, markImg.Width, markImg.Height, GraphicsUnit.Pixel, imageAttributes);

                graphic.Dispose();
                return(bitmap);

                #endregion
            }
            else
            {
                #region 非索引图片,直接在上面加上水印
                Graphics graphic = Graphics.FromImage(imgSource);

                #region 缩放处理
                //如果原图小于水印图片 等比缩放水印图
                if (markImg.Width >= imgSource.Width || markImg.Height >= imgSource.Height)
                {
                    markImg = ImageShrink(imgSource, markImg);
                }
                #endregion

                #region 水印位置
                //水印位置
                int x;
                int y;
                WaterMarkLocations(model, imgSource, markImg, out x, out y);
                #endregion

                //将水印加在原图上
                graphic.DrawImage(markImg, new Rectangle(x, y, markImg.Width, markImg.Height), 0, 0, markImg.Width, markImg.Height, GraphicsUnit.Pixel, imageAttributes);

                graphic.Dispose();
                return(imgSource);

                #endregion
            }
            #endregion
        }