Browse Source

优化水印处理

懒得勤快 8 months ago
parent
commit
d965cd8f2e

+ 1 - 1
Directory.Build.props

@@ -1,6 +1,6 @@
 <Project>
  <PropertyGroup>
-   <Version>2025.1.2</Version>
+   <Version>2025.1.3</Version>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
 </Project>

+ 23 - 15
Masuit.Tools.Abstractions/Extensions/BaseType/StreamExtensions.cs

@@ -7,6 +7,8 @@ using System.Threading;
 using System.Threading.Tasks;
 
 #if NET5_0_OR_GREATER
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.PixelFormats;
 using System;
 using System.Buffers;
 using System.Runtime.InteropServices;
@@ -341,19 +343,25 @@ public static class StreamExtensions
 
 #if NET5_0_OR_GREATER
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="stream"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        public static async Task<byte[]> ToArrayAsync(this Stream stream, CancellationToken cancellationToken = default)
-        {
-            stream.Position = 0;
-            byte[] bytes = new byte[stream.Length];
-            await stream.ReadAsync(bytes, cancellationToken);
-            stream.Seek(0, SeekOrigin.Begin);
-            return bytes;
-        }
+    /// <summary>
+    ///
+    /// </summary>
+    /// <param name="stream"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public static async Task<byte[]> ToArrayAsync(this Stream stream, CancellationToken cancellationToken = default)
+    {
+        stream.Position = 0;
+        byte[] bytes = new byte[stream.Length];
+        await stream.ReadAsync(bytes, cancellationToken);
+        stream.Seek(0, SeekOrigin.Begin);
+        return bytes;
+    }
+
+    public static Image<Rgba32> AsImage(this Stream stream)
+    {
+        return Image.Load<Rgba32>(stream);
+    }
+
 #endif
-}
+}

+ 14 - 4
Masuit.Tools.Abstractions/Media/ImageWatermarker.cs

@@ -87,7 +87,7 @@ namespace Masuit.Tools.Media
         /// <param name="font">字体</param>
         public PooledMemoryStream AddWatermark(string watermarkText, Font font, Color color, WatermarkPosition watermarkPosition = WatermarkPosition.BottomRight, int textPadding = 10)
         {
-            var imageFormat = Image.DetectFormat(_stream);
+            var format = Image.DetectFormat(_stream);
             _stream.Seek(0, SeekOrigin.Begin);
             using var img = Image.Load<Rgba32>(_stream);
             var textMeasure = TextMeasurer.MeasureSize(watermarkText, new TextOptions(font));
@@ -136,7 +136,7 @@ namespace Masuit.Tools.Media
             var ms = new PooledMemoryStream();
             if (ImageEncoder == null)
             {
-                img.Save(ms, imageFormat);
+                img.Save(ms, format);
             }
             else
             {
@@ -150,12 +150,14 @@ namespace Masuit.Tools.Media
         /// 添加水印
         /// </summary>
         /// <param name="watermarkImage">水印图片</param>
-        /// <param name="opacity">水印图片</param>
+        /// <param name="opacity">透明度</param>
         /// <param name="watermarkPosition">水印位置</param>
         /// <param name="padding">水印边距</param>
         /// <returns></returns>
         public PooledMemoryStream AddWatermark(Stream watermarkImage, float opacity = 1f, WatermarkPosition watermarkPosition = WatermarkPosition.BottomRight, int padding = 20)
         {
+            var format = Image.DetectFormat(_stream);
+            _stream.Seek(0, SeekOrigin.Begin);
             using var img = Image.Load<Rgba32>(_stream);
             var height = img.Height;
             var width = img.Width;
@@ -211,7 +213,15 @@ namespace Masuit.Tools.Media
                 watermark.Dispose();
             });
             var ms = new PooledMemoryStream();
-            img.SaveAsWebp(ms);
+            if (ImageEncoder == null)
+            {
+                img.Save(ms, format);
+            }
+            else
+            {
+                img.Save(ms, ImageEncoder);
+            }
+
             ms.Position = 0;
             return ms;
         }

+ 1 - 1
Masuit.Tools.Excel/Masuit.Tools.Excel.csproj

@@ -37,7 +37,7 @@
       </None>
     </ItemGroup>
     <ItemGroup>
-        <PackageReference Include="EPPlus" Version="7.5.3" />
+        <PackageReference Include="EPPlus" Version="7.6.0" />
         <PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
     </ItemGroup>
     <ItemGroup>