Example #1
0
        /// <summary>
        /// Add watermark.
        /// </summary>
        /// <param name="fileName"></param>
        public MemoryStream AddWatermark(string fileName,
                                         string watermark,
                                         Color foregroundColor,
                                         float fontSize    = 12.0f,
                                         string fontFamily = "微软雅黑",
                                         WatermarkPlacement watermarkPlacement = WatermarkPlacement.BottomRight)
        {
            if (string.IsNullOrWhiteSpace(fileName))
            {
                throw new System.ArgumentException("message", nameof(fileName));
            }

            if (string.IsNullOrWhiteSpace(watermark))
            {
                throw new System.ArgumentException("message", nameof(watermark));
            }

            var ext                = Path.GetExtension(fileName);
            var dirName            = Path.GetDirectoryName(fileName);
            var fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileName);

            var saveName = Path.Combine(dirName, $"{fileNameWithoutExt}_wm{ext}");

            var ms = new MemoryStream();

            using (var img = Image.FromStream(File.OpenRead(fileName)))
                using (var g = Graphics.FromImage(img))
                {
                    #region font & background.
                    var font            = new Font(fontFamily, fontSize, FontStyle.Bold, GraphicsUnit.Pixel);
                    var foregroundBrush = new SolidBrush(foregroundColor); //笔刷,画文字用
                    //Brush blackBrush = new SolidBrush(backgroundColor); //笔刷,画背景用
                    #endregion

                    float textWidth = watermark.Length * fontSize; //文本的长度
                                                                   //下面定义一个矩形区域,以后在这个矩形里画上白底黑字
                    float rectX      = 0;
                    float rectY      = 0;
                    float rectWidth  = watermark.Length * (fontSize * 1.113f);
                    float rectHeight = fontSize * 1.4f;
                    //声明矩形域
                    RectangleF textArea = new RectangleF(rectX, rectY, rectWidth, rectHeight);

                    #region text placement.
                    SizeF crSize;
                    crSize = g.MeasureString(watermark, font);
                    var point = GetRectangleFPoint(watermarkPlacement, img, crSize);
                    textArea.X = point.Item1;
                    textArea.Y = point.Item2;
                    #endregion

                    //g.FillRectangle(blackBrush, textArea);
                    g.DrawString(watermark, font, foregroundBrush, textArea);
                    img.Save(ms, ImageFormat.Png);
                    img.Save(saveName, ImageFormat.Png);
                    return(ms);
                }
        }
Example #2
0
 public Watermark(System.Drawing.Image image, WatermarkPlacement placement)
 {
     if ((placement < WatermarkPlacement.TopLeft) || (placement > WatermarkPlacement.Center))
     {
         throw new ArgumentOutOfRangeException("placement");
     }
     this._image = image;
     this._placement = placement;
 }
Example #3
0
        private (float, float) GetRectangleFPoint(WatermarkPlacement watermarkPlacement, Image img, SizeF crSize)
        {
            float xpos = 0;
            float ypos = 0;

            switch (watermarkPlacement)
            {
            case WatermarkPlacement.TopLeft:
                xpos = img.Width * (float).01;
                ypos = img.Height * (float).01;
                break;

            case WatermarkPlacement.Top:
                xpos = img.Width * (float).50 - (crSize.Width / 2);
                ypos = img.Height * (float).01;
                break;

            case WatermarkPlacement.TopRight:
                xpos = img.Width * (float).99 - crSize.Width;
                ypos = img.Height * (float).01;
                break;

            case WatermarkPlacement.Left:
                xpos = img.Width * (float).01;
                ypos = img.Height * (float).50 - (crSize.Height / 2);
                break;

            case WatermarkPlacement.Center:
                xpos = img.Width * (float).50 - (crSize.Width / 2);
                ypos = img.Height * (float).50 - (crSize.Height / 2);
                break;

            case WatermarkPlacement.Right:
                xpos = img.Width * (float).99 - crSize.Width;
                ypos = img.Height * (float).50 - (crSize.Height / 2);
                break;

            case WatermarkPlacement.BottomLeft:
                xpos = img.Width * (float).01;
                ypos = img.Height * (float).99 - crSize.Height;
                break;

            case WatermarkPlacement.BottomCenter:
                xpos = img.Width * (float).50 - (crSize.Width / 2);
                ypos = img.Height * (float).99 - crSize.Height;
                break;

            case WatermarkPlacement.BottomRight:
            default:
                xpos = img.Width * (float).99 - crSize.Width;
                ypos = img.Height * (float).99 - crSize.Height;
                break;
            }
            return(xpos, ypos);
        }
Example #4
0
        private void SelectWmImagePlacement()
        {
            switch (this.lstWMImagePlacement.SelectedItem.ToString())
            {
            case "Top Left":
                this.wmImagePlacement = WatermarkPlacement.TopLeft;
                break;

            case "Top Center":
                this.wmImagePlacement = WatermarkPlacement.TopCenter;
                break;

            case "Top Right":
                this.wmImagePlacement = WatermarkPlacement.TopRight;
                break;

            case "Middle Left":
                this.wmImagePlacement = WatermarkPlacement.MiddleLeft;
                break;

            case "Middle Center":
                this.wmImagePlacement = WatermarkPlacement.MiddleCenter;
                break;

            case "Middle Right":
                this.wmImagePlacement = WatermarkPlacement.MiddleRight;
                break;

            case "Bottom Left":
                this.wmImagePlacement = WatermarkPlacement.BottomLeft;
                break;

            case "Bottom Center":
                this.wmImagePlacement = WatermarkPlacement.BottomCenter;
                break;

            case "Bottom Right":
                this.wmImagePlacement = WatermarkPlacement.BottomRight;
                break;
            }
        }