예제 #1
0
    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++;
            }
        }
    }
예제 #2
0
    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);
    }
예제 #4
0
    /// <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);
    }
예제 #5
0
    protected override IBitmapList DrawCore(IBitmapList bitmaps)
    {
        if (Options.Watermark.Mode is WatermarkMode.Image && _watermarkBitmap is not null)
        {
            DrawImageWatermark(bitmaps);
        }
        else
        {
            DrawTextWatermark(bitmaps);
        }

        return(bitmaps);
    }
예제 #6
0
    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);
            }
        }
    }
예제 #7
0
 /// <summary>
 /// 绘制位图列表核心。
 /// </summary>
 /// <param name="bitmaps">给定的 <see cref="IBitmapList"/>。</param>
 /// <returns>返回 <see cref="IBitmapList"/>。</returns>
 protected abstract IBitmapList DrawCore(IBitmapList bitmaps);