private bool IsWatermarkEnabled(IWatermarkConfiguration watermarkConfig, Uri requestUrl) { bool haveIgnoreWatermarkQueryString = requestUrl.Query.IndexOf("wm=false", StringComparison.OrdinalIgnoreCase) != -1; return(!watermarkConfig.EnableIgnoreWatermarkQueryString || (watermarkConfig.EnableIgnoreWatermarkQueryString && !haveIgnoreWatermarkQueryString)); }
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); } }
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); } } }
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)); } }
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); } }