浏览代码

优化图片水印

懒得勤快 3 年之前
父节点
当前提交
8efa05022c

+ 3 - 1
src/Masuit.MyBlogs.Core/Common/CommonHelper.cs

@@ -369,7 +369,9 @@ namespace Masuit.MyBlogs.Core.Common
                         SkipWatermarkForSmallImages = true,
                         SmallImagePixelsThreshold = 90000
                     };
-                    return watermarker.AddWatermark(SystemSettings["Watermark"], AppContext.BaseDirectory + "App_Data/华康勘亭流.ttf", 20, Color.LightGray, WatermarkPosition.BottomRight, 30);
+                    var watermarkText = SystemSettings["Watermark"];
+                    var position = Enum.Parse<WatermarkPosition>(SystemSettings["WatermarkPosition"] ?? "3");
+                    return watermarker.AddWatermark(watermarkText, AppContext.BaseDirectory + "App_Data/华康勘亭流.ttf", 20, Color.LightGray, position, 30);
                 }
                 catch
                 {

+ 11 - 0
src/Masuit.MyBlogs.Core/Common/ImagebedClient.cs

@@ -8,6 +8,7 @@ using System.Net.Http.Headers;
 using System.Text.RegularExpressions;
 using System.Web;
 using Collections.Pooled;
+using ImageMagick;
 
 namespace Masuit.MyBlogs.Core.Common
 {
@@ -45,6 +46,16 @@ namespace Masuit.MyBlogs.Core.Common
                 return Task.FromResult<(string, bool)>((null, false));
             }
 
+            var optimizer = new ImageOptimizer
+            {
+                IgnoreUnsupportedFormats = true,
+                OptimalCompression = true
+            };
+            if (optimizer.IsSupported(stream))
+            {
+                optimizer.LosslessCompress(stream);
+            }
+
             file = Regex.Replace(Path.GetFileName(file), @"\p{P}|\p{S}", "");
             using var gitlabs = AppConfig.GitlabConfigs.Where(c => c.FileLimitSize >= stream.Length && !_failedList.Contains(c.ApiUrl)).OrderByRandom().ToPooledList();
             if (gitlabs.Count > 0)

+ 5 - 4
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -39,7 +39,7 @@
 
     <ItemGroup>
         <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
-        <PackageReference Include="AutoMapper.Extensions.ExpressionMapping" Version="5.0.3" />
+        <PackageReference Include="AutoMapper.Extensions.ExpressionMapping" Version="5.1.0" />
         <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="11.0.0" />
         <PackageReference Include="Ben.Demystifier" Version="0.4.1" />
         <PackageReference Include="CacheManager.Serialization.Json" Version="1.2.0" />
@@ -54,14 +54,15 @@
         <PackageReference Include="htmldiff.net-core" Version="1.3.6" />
         <PackageReference Include="IP2Region" Version="1.2.0" />
         <PackageReference Include="Karambolo.AspNetCore.Bundling.NUglify" Version="3.5.1" />
-        <PackageReference Include="Masuit.Tools.Excel" Version="1.1.2.2" />
+        <PackageReference Include="Magick.NET-Q8-AnyCPU" Version="11.2.1" />
+        <PackageReference Include="Masuit.Tools.Excel" Version="1.2.1" />
         <PackageReference Include="MaxMind.GeoIP2" Version="5.1.0" />
         <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.6" />
         <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.6" />
         <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="6.0.6" />
         <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.6" />
         <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.6" />
-        <PackageReference Include="Microsoft.Graph" Version="4.32.0" />
+        <PackageReference Include="Microsoft.Graph" Version="4.33.0" />
         <PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
         <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.2.22" />
         <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.5" />
@@ -72,7 +73,7 @@
         <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.19" />
         <PackageReference Include="TimeZoneConverter" Version="5.0.0" />
         <PackageReference Include="WilderMinds.RssSyndication" Version="1.7.0" />
-        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.14.1" />
+        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.14.2" />
     </ItemGroup>
     <ItemGroup>
         <Content Update="appsettings.json">

+ 20 - 4
src/Masuit.MyBlogs.Core/wwwroot/ng-views/views/system/home.html

@@ -35,10 +35,26 @@
                 <input type="text" class="form-control" ng-model="Settings.ReservedName" />
             </div>
         </div>
-        <div class="input-group">
-            <span class="input-group-addon">上传图片水印:</span>
-            <div class="fg-line">
-                <input type="text" class="form-control" ng-model="Settings.Watermark" placeholder="留空则上传图片时不添加水印" />
+        <div class="row">
+            <div class="col-md-4">
+                <div class="input-group">
+                    <span class="input-group-addon">上传图片水印:</span>
+                    <div class="fg-line">
+                        <input type="text" class="form-control" ng-model="Settings.Watermark" placeholder="留空则上传图片时不添加水印" />
+                    </div>
+                </div>
+            </div>
+            <div class="col-md-2">
+                <div class="input-group">
+                    <span class="input-group-addon">水印位置:</span>
+                    <select ng-model="Settings.WatermarkPosition" class="form-control">
+                        <option ng-value="'0'">左上角</option>
+                        <option ng-value="'1'">右上角</option>
+                        <option ng-value="'2'">左下角</option>
+                        <option ng-value="'3'">右下角</option>
+                        <option ng-value="'4'">中间</option>
+                    </select>
+                </div>
             </div>
         </div>
         <div class="form-inline">