示例#1
0
        private bool IsWatermarkEnabled(IWatermarkConfiguration watermarkConfig, Uri requestUrl)
        {
            bool haveIgnoreWatermarkQueryString = requestUrl.Query.IndexOf("wm=false", StringComparison.OrdinalIgnoreCase) != -1;

            return(!watermarkConfig.EnableIgnoreWatermarkQueryString ||
                   (watermarkConfig.EnableIgnoreWatermarkQueryString && !haveIgnoreWatermarkQueryString));
        }
示例#2
0
        private void WriteWatermarkTextToImage(IWatermarkConfiguration config, Graphics graphic)
        {
            var   watermarkFont = new Font("Arial", config.FontSize);
            var   brush         = new SolidBrush(Color.FromArgb(80, Color.White));
            SizeF textSize      = graphic.MeasureString(config.WatermarkText, watermarkFont);

            IEnumerable <PointF> positions = GetAllTextPositionByConfigFontAndImage(config, textSize, graphic);

            foreach (PointF position in positions)
            {
                graphic.DrawString(config.WatermarkText, watermarkFont, brush, position);
            }
        }
示例#3
0
        private void ContextOnBeginRequest(object sender, EventArgs eventArgs)
        {
            var         application = (HttpApplication)sender;
            HttpContext context     = application.Context;

            if (context.Request.Url.PathAndQuery.Contains("ShowMedia.ashx"))
            {
                IWatermarkConfiguration watermarkConfig = GetWatermarkConfigOrDefault(context.Request.QueryString);

                if (watermarkConfig != null && IsWatermarkEnabled(watermarkConfig, context.Request.Url))
                {
                    var filter = new ResponseFilterStream(context.Response.Filter);
                    filter.TransformStream += AddWatermarkToStream;

                    context.Response.Filter = filter;
                    context.Items.Add(WatermarkConfigKey, watermarkConfig);
                }
            }
        }
示例#4
0
        private IEnumerable <PointF> GetAllTextPositionByConfigFontAndImage(IWatermarkConfiguration config, SizeF watermarkSize, Graphics graphic)
        {
            if (config.ShowOnTopLeft)
            {
                yield return(new PointF(0, 0));
            }

            if (config.ShowOnTopRight)
            {
                yield return(new PointF(graphic.VisibleClipBounds.Width - watermarkSize.Width, 0));
            }

            if (config.ShowOnBottmRight)
            {
                yield return
                    (new PointF(graphic.VisibleClipBounds.Width - watermarkSize.Width,
                                graphic.VisibleClipBounds.Height - watermarkSize.Height));
            }

            if (config.ShowOnBottmLeft)
            {
                yield return(new PointF(0, graphic.VisibleClipBounds.Height - watermarkSize.Height));
            }
        }
示例#5
0
        private void WriteWatermarkImageToImage(IWatermarkConfiguration config, Graphics graphic)
        {
            IMediaFile originalMediaFile = MediaUrlHelper.GetFileFromQueryString(HttpContext.Current.Request.QueryString);

            IMediaFile imageFile;

            using (var conn = new DataConnection())
            {
                imageFile = conn.Get <IMediaFile>().SingleOrDefault(i => i.KeyPath == config.WatermarkImageFilePath);
            }

            Image watermarkImage           = Image.FromStream(imageFile.GetReadStream());
            IEnumerable <PointF> positions = GetAllTextPositionByConfigFontAndImage(config, watermarkImage.Size, graphic);

            Size  originalImageSize = GetImageSizeFromCacheOrFile(originalMediaFile);
            float widthRatio        = graphic.VisibleClipBounds.Width / originalImageSize.Width;
            float heightRatio       = graphic.VisibleClipBounds.Height / originalImageSize.Height;
            var   watermarkSize     = new SizeF(watermarkImage.Width * widthRatio, watermarkImage.Height * heightRatio);

            foreach (PointF position in positions)
            {
                graphic.DrawImage(watermarkImage, position.X, position.Y, watermarkSize.Width, watermarkSize.Height);
            }
        }