private void DrawTextWatermark(IBitmapList bitmaps) { if (string.IsNullOrEmpty(Options.Watermark.Text)) { throw new ArgumentException("The text watermark cannot be empty."); } var count = 1; foreach (var bitmap in bitmaps) { bitmap.AppendSaveAsSuffix(Options.Watermark.FileNameSuffix); var realBitmap = (SKBitmap)bitmap.Source; using (var canvas = new SKCanvas(realBitmap)) { var imageSize = new Size(realBitmap.Width, realBitmap.Height); var coord = ImageHelper.CalculateCoord(imageSize, Options.Watermark.InitialCoord, Options.Watermark.IsRandomCoord); canvas.DrawText(Options.Watermark.Text, coord.X, coord.Y, count.IsMultiples(2) ? _alternPaint : _forePaint); count++; } } }
protected override IBitmapList DrawCore(IBitmapList bitmaps) { var baseDirectory = SaveSubpathFunc(Clock).SetBasePath(Options.ImageDirectory); baseDirectory.CreateDirectory(); foreach (var bitmap in bitmaps) { var realBitmap = (SKBitmap)bitmap.Source; using (var image = SKImage.FromBitmap(realBitmap)) using (var data = image.Encode(ImageFormat, Options.EncodeQuality)) { // 文件基础名+另存为后缀+文件格式名,如:6123xxxx-suffix.jpeg var fileName = SaveFileBaseNameFunc(Clock, bitmap) + bitmap.SaveAsSuffix + Options.ImageFormat.Leading('.'); bitmap.SaveAsPath = baseDirectory.CombinePath(fileName); using (var fs = new FileStream(bitmap.SaveAsPath, FileMode.OpenOrCreate)) { data.SaveTo(fs); } } } return(bitmaps); }
protected override IBitmapList DrawCore(IBitmapList bitmaps) { if (Options.Scale.Descriptors.Count < 1) { return(bitmaps); } var scaleBitmaps = new BitmapList(); var watermarkBitmaps = new BitmapList(); foreach (var bitmap in bitmaps) { var realBitmap = (SKBitmap)bitmap.Source; // 遍历缩放信息 foreach (var scaleDescriptor in Options.Scale.Descriptors) { // 如果源图尺寸小于缩放尺寸,则跳过当前缩放信息 if (realBitmap.Width <= scaleDescriptor.MaxSize.Width && realBitmap.Height <= scaleDescriptor.MaxSize.Height) { continue; } // 计算等比例缩放尺寸 var imageSize = new Size(realBitmap.Width, realBitmap.Height); var scaleSize = ImageHelper.ScaleSize(imageSize, scaleDescriptor.MaxSize); var scaleInfo = new SKImageInfo(scaleSize.Width, scaleSize.Height, realBitmap.Info.ColorType, realBitmap.Info.AlphaType); // 是否附加缩放尺寸后缀 var scaleNameFuffix = scaleDescriptor.FileNameSuffix; if (Options.Scale.AddScaleSizeSuffix) { scaleNameFuffix += $"-{scaleSize.Width}x{scaleSize.Height}"; } // 创建缩放位图描述符 var scaleBitmap = realBitmap.Resize(scaleInfo, Options.ResizeQuality); var descriptor = new BitmapDescriptor(scaleBitmap, bitmap.FilePath, scaleNameFuffix); scaleBitmaps.Add(descriptor); if (scaleDescriptor.AddWatermark) { watermarkBitmaps.Add(descriptor); } } } // 处理缩放位图集合的水印 if (watermarkBitmaps.Count > 0) { _watermarkDrawer.Draw(watermarkBitmaps); } return(scaleBitmaps); }
/// <summary> /// 绘制位图列表。 /// </summary> /// <param name="bitmaps">给定的 <see cref="IBitmapList"/>。</param> /// <returns>返回 <see cref="IBitmapList"/>。</returns> public virtual IBitmapList Draw(IBitmapList bitmaps) { if (bitmaps.Count > 0) { return(DrawCore(bitmaps)); } return(bitmaps); }
protected override IBitmapList DrawCore(IBitmapList bitmaps) { if (Options.Watermark.Mode is WatermarkMode.Image && _watermarkBitmap is not null) { DrawImageWatermark(bitmaps); } else { DrawTextWatermark(bitmaps); } return(bitmaps); }
private void DrawImageWatermark(IBitmapList bitmaps) { foreach (var bitmap in bitmaps) { bitmap.AppendSaveAsSuffix(Options.Watermark.FileNameSuffix); var realBitmap = (SKBitmap)bitmap.Source; using (var canvas = new SKCanvas(realBitmap)) { var imageSize = new Size(realBitmap.Width, realBitmap.Height); var coord = ImageHelper.CalculateCoord(imageSize, Options.Watermark.InitialCoord, Options.Watermark.IsRandomCoord); // 绘制图像水印 canvas.DrawBitmap(_watermarkBitmap, coord.X, coord.Y); } } }
/// <summary> /// 绘制位图列表核心。 /// </summary> /// <param name="bitmaps">给定的 <see cref="IBitmapList"/>。</param> /// <returns>返回 <see cref="IBitmapList"/>。</returns> protected abstract IBitmapList DrawCore(IBitmapList bitmaps);