From 1b1257b5af55b4ed8d74eb787ac2189f4d6fb654 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 15:29:24 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E9=99=8D=E7=BA=A7=20Skia=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E9=81=BF=E5=85=8D=E5=92=8C=20Avalonia=20?= =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MediaConverters.Tool/MediaConverters.Tool.csproj | 1 + .../SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj b/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj index 173132c..bf09b18 100644 --- a/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj +++ b/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj @@ -23,6 +23,7 @@ + diff --git a/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj b/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj index 7418d1f..a8faf59 100644 --- a/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj +++ b/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj @@ -53,7 +53,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + From ce1518563c42ccf9df8d9402c6dd1e0b3c846099 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 15:30:10 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E5=87=8F=E5=B0=91=E6=9B=B4=E5=A4=9A?= =?UTF-8?q?=E7=9A=84=E5=8C=85=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj b/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj index a8faf59..aaa226e 100644 --- a/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj +++ b/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/SkiaWmfRenderer.csproj @@ -59,7 +59,6 @@ - From a7057139a58f9e7868ceac788d5ad08b071a750b Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 15:38:05 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E5=AE=89=E8=A3=85=E6=89=80=E9=9C=80?= =?UTF-8?q?=E8=B4=9F=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MediaConverters.Tool/MediaConverters.Tool.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj b/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj index bf09b18..a60b8a9 100644 --- a/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj +++ b/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj @@ -19,6 +19,10 @@ + + + + From 2cffc612a8ee81e56a3816321b2f796c12254eb3 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 15:49:19 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E5=A4=9A=E5=AA=92=E4=BD=93=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MediaConverters.Tool/Program.cs | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/MediaConverters/MediaConverters.Tool/Program.cs b/src/MediaConverters/MediaConverters.Tool/Program.cs index c7ea23f..d533c00 100644 --- a/src/MediaConverters/MediaConverters.Tool/Program.cs +++ b/src/MediaConverters/MediaConverters.Tool/Program.cs @@ -11,6 +11,7 @@ using System.IO; using System.Threading.Tasks; using DotNetCampus.Cli; +using DotNetCampus.MediaConverter.SkiaWmfRenderer.Optimizations; using DotNetCampus.MediaConverters.CommandLineHandlers; using SixLabors.ImageSharp.Formats.Png; using ErrorCode = DotNetCampus.MediaConverters.Contexts.MediaConverterErrorCode; @@ -25,19 +26,60 @@ static async Task Main(string[] args) { // 调试模式 var inputFile = "image.png"; + + if (!File.Exists(inputFile)) + { + inputFile = "image.wmf"; + } + if (args.Length == 1) { inputFile = args[0]; } + if (!File.Exists(inputFile)) + { + Console.WriteLine($"Input file not found. '{Path.GetFullPath(inputFile)}'"); + return -1; + } + + var testFolder = + Directory.CreateDirectory(Path.Join(AppContext.BaseDirectory, $"Test_{Path.GetRandomFileName()}")); + + if (string.Equals(Path.GetExtension(inputFile),".wmf")) + { + Console.WriteLine($"Input File is wmf file"); + + var wmfWorkingFolder = Path.Join(testFolder.FullName,"WMF"); + + var optimizationContext = new EnhancedGraphicsMetafileOptimizationContext() + { + ImageFile = new FileInfo(inputFile), + WorkingFolder = Directory.CreateDirectory(wmfWorkingFolder), + MaxImageWidth = null, + MaxImageHeight = null, + ShouldLogToFile = true, + ShouldLogToConsole = true, + }; + EnhancedGraphicsMetafileOptimizationResult optimizationResult = EnhancedGraphicsMetafileOptimization.ConvertWmfOrEmfToPngFile(optimizationContext); + Console.WriteLine($"Finish convert to png file.{optimizationResult}"); + + if (optimizationResult.IsSuccess) + { + inputFile = optimizationResult.OptimizedImageFile.FullName; + } + else + { + return -1; + } + } + var imageConvertContext = new ImageConvertContext() { MaxImageWidth = 1000, MaxImageHeight = 1000, }; - - var testFolder = - Directory.CreateDirectory(Path.Join(AppContext.BaseDirectory, $"Test_{Path.GetRandomFileName()}")); + var jsonText = imageConvertContext.ToJsonText(); var configurationFile = Path.Join(testFolder.FullName, "image-convert.json"); await File.WriteAllTextAsync(configurationFile, jsonText); From fc989c472a3be607a9e502ab2bef713fd7a7d9c4 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 15:57:44 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=89=BE=E4=B8=8D?= =?UTF-8?q?=E5=88=B0=E5=B7=A5=E5=85=B7=E5=88=99=E5=8A=A0=E4=B8=8A=E7=BC=93?= =?UTF-8?q?=E5=AD=98=EF=BC=8C=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D=E8=B0=83?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EnhancedGraphicsMetafileOptimization.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/Optimizations/EnhancedGraphicsMetafileOptimization.cs b/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/Optimizations/EnhancedGraphicsMetafileOptimization.cs index 9e8fbfc..3e815f6 100644 --- a/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/Optimizations/EnhancedGraphicsMetafileOptimization.cs +++ b/src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/Optimizations/EnhancedGraphicsMetafileOptimization.cs @@ -291,6 +291,12 @@ private static EnhancedGraphicsMetafileOptimizationResult ConvertWithLibWmf(in E return EnhancedGraphicsMetafileOptimizationResult.NotSupported(); } + /// + /// 是否 Inkscape 应用程序未安装 + /// + /// 先不考虑后续 Inkscape 可能安装的问题。可在业务端设置为 false 继续尝试 + public static bool IsInkscapeNotBeInstalled { get; set; } + [SupportedOSPlatform("linux")] private static EnhancedGraphicsMetafileOptimizationResult ConvertWithInkscape(EnhancedGraphicsMetafileOptimizationContext context) { @@ -301,6 +307,13 @@ private static EnhancedGraphicsMetafileOptimizationResult ConvertWithInkscape(En context.LogMessage($"Start convert emf or wmf to png by Inkscape. File:'{file}'"); + if (IsInkscapeNotBeInstalled) + { + // 转换失败,因为缓存的属性明确表示 Inkscape 应用程序不存在 + context.LogMessage($"Convert emf or wmf to svg by Inkscape failed. Because cache property indicate Inkscape application not be installed. {nameof(IsInkscapeNotBeInstalled)}=true. We will continue use libwmf to convert the image."); + return EnhancedGraphicsMetafileOptimizationResult.NotSupported(); + } + var processStartInfo = new ProcessStartInfo("inkscape") { ArgumentList = @@ -336,6 +349,9 @@ private static EnhancedGraphicsMetafileOptimizationResult ConvertWithInkscape(En // 明确不存在,那就不记录错误信息了 // 大概耗时 17 毫秒 context.LogMessage($"Convert emf or wmf to svg by Inkscape failed. Because not found Inkscape application. Please make sure Inkscape be installed. We will continue use libwmf to convert the image."); + + // 设置为 true 缓存,避免下次继续尝试 + IsInkscapeNotBeInstalled = true; } else { From a78d96091167ababe0549e56a4c3b05b1179c37e Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 15:58:11 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E5=8A=A0=E4=B8=8A=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=B0=9D=E8=AF=95=E5=A4=9A=E6=AC=A1=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MediaConverters/MediaConverters.Tool/Program.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/MediaConverters/MediaConverters.Tool/Program.cs b/src/MediaConverters/MediaConverters.Tool/Program.cs index d533c00..e034932 100644 --- a/src/MediaConverters/MediaConverters.Tool/Program.cs +++ b/src/MediaConverters/MediaConverters.Tool/Program.cs @@ -64,6 +64,8 @@ static async Task Main(string[] args) EnhancedGraphicsMetafileOptimizationResult optimizationResult = EnhancedGraphicsMetafileOptimization.ConvertWmfOrEmfToPngFile(optimizationContext); Console.WriteLine($"Finish convert to png file.{optimizationResult}"); + optimizationResult = EnhancedGraphicsMetafileOptimization.ConvertWmfOrEmfToPngFile(optimizationContext); + if (optimizationResult.IsSuccess) { inputFile = optimizationResult.OptimizedImageFile.FullName; From 8949d64e97e4b1f729f308ac06b22c01bb3a031b Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 15:59:33 +0800 Subject: [PATCH 07/10] =?UTF-8?q?Revert=20"=E5=8A=A0=E4=B8=8A=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E9=80=BB=E8=BE=91=E5=B0=9D=E8=AF=95=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a78d96091167ababe0549e56a4c3b05b1179c37e. --- src/MediaConverters/MediaConverters.Tool/Program.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/MediaConverters/MediaConverters.Tool/Program.cs b/src/MediaConverters/MediaConverters.Tool/Program.cs index e034932..d533c00 100644 --- a/src/MediaConverters/MediaConverters.Tool/Program.cs +++ b/src/MediaConverters/MediaConverters.Tool/Program.cs @@ -64,8 +64,6 @@ static async Task Main(string[] args) EnhancedGraphicsMetafileOptimizationResult optimizationResult = EnhancedGraphicsMetafileOptimization.ConvertWmfOrEmfToPngFile(optimizationContext); Console.WriteLine($"Finish convert to png file.{optimizationResult}"); - optimizationResult = EnhancedGraphicsMetafileOptimization.ConvertWmfOrEmfToPngFile(optimizationContext); - if (optimizationResult.IsSuccess) { inputFile = optimizationResult.OptimizedImageFile.FullName; From 974b697f3243e9ea336ccd89b0531b1bd5484895 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 15:59:40 +0800 Subject: [PATCH 08/10] =?UTF-8?q?Revert=20"=E5=AE=89=E8=A3=85=E6=89=80?= =?UTF-8?q?=E9=9C=80=E8=B4=9F=E8=BD=BD"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a7057139a58f9e7868ceac788d5ad08b071a750b. --- .../MediaConverters.Tool/MediaConverters.Tool.csproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj b/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj index a60b8a9..bf09b18 100644 --- a/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj +++ b/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj @@ -19,10 +19,6 @@ - - - - From eac628496fe366feb7a14ffe3c706c25a2940476 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 15:59:53 +0800 Subject: [PATCH 09/10] =?UTF-8?q?Revert=20"=E6=B5=8B=E8=AF=95=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E5=A4=9A=E5=AA=92=E4=BD=93=E8=BD=AC=E6=8D=A2"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 2cffc612a8ee81e56a3816321b2f796c12254eb3. --- .../MediaConverters.Tool/Program.cs | 48 ++----------------- 1 file changed, 3 insertions(+), 45 deletions(-) diff --git a/src/MediaConverters/MediaConverters.Tool/Program.cs b/src/MediaConverters/MediaConverters.Tool/Program.cs index d533c00..c7ea23f 100644 --- a/src/MediaConverters/MediaConverters.Tool/Program.cs +++ b/src/MediaConverters/MediaConverters.Tool/Program.cs @@ -11,7 +11,6 @@ using System.IO; using System.Threading.Tasks; using DotNetCampus.Cli; -using DotNetCampus.MediaConverter.SkiaWmfRenderer.Optimizations; using DotNetCampus.MediaConverters.CommandLineHandlers; using SixLabors.ImageSharp.Formats.Png; using ErrorCode = DotNetCampus.MediaConverters.Contexts.MediaConverterErrorCode; @@ -26,60 +25,19 @@ static async Task Main(string[] args) { // 调试模式 var inputFile = "image.png"; - - if (!File.Exists(inputFile)) - { - inputFile = "image.wmf"; - } - if (args.Length == 1) { inputFile = args[0]; } - if (!File.Exists(inputFile)) - { - Console.WriteLine($"Input file not found. '{Path.GetFullPath(inputFile)}'"); - return -1; - } - - var testFolder = - Directory.CreateDirectory(Path.Join(AppContext.BaseDirectory, $"Test_{Path.GetRandomFileName()}")); - - if (string.Equals(Path.GetExtension(inputFile),".wmf")) - { - Console.WriteLine($"Input File is wmf file"); - - var wmfWorkingFolder = Path.Join(testFolder.FullName,"WMF"); - - var optimizationContext = new EnhancedGraphicsMetafileOptimizationContext() - { - ImageFile = new FileInfo(inputFile), - WorkingFolder = Directory.CreateDirectory(wmfWorkingFolder), - MaxImageWidth = null, - MaxImageHeight = null, - ShouldLogToFile = true, - ShouldLogToConsole = true, - }; - EnhancedGraphicsMetafileOptimizationResult optimizationResult = EnhancedGraphicsMetafileOptimization.ConvertWmfOrEmfToPngFile(optimizationContext); - Console.WriteLine($"Finish convert to png file.{optimizationResult}"); - - if (optimizationResult.IsSuccess) - { - inputFile = optimizationResult.OptimizedImageFile.FullName; - } - else - { - return -1; - } - } - var imageConvertContext = new ImageConvertContext() { MaxImageWidth = 1000, MaxImageHeight = 1000, }; - + + var testFolder = + Directory.CreateDirectory(Path.Join(AppContext.BaseDirectory, $"Test_{Path.GetRandomFileName()}")); var jsonText = imageConvertContext.ToJsonText(); var configurationFile = Path.Join(testFolder.FullName, "image-convert.json"); await File.WriteAllTextAsync(configurationFile, jsonText); From 983bbf5538cd903b82a9592b62bc331e1901e634 Mon Sep 17 00:00:00 2001 From: lindexi Date: Tue, 16 Sep 2025 16:00:20 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MediaConverters.Tool/MediaConverters.Tool.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj b/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj index bf09b18..173132c 100644 --- a/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj +++ b/src/MediaConverters/MediaConverters.Tool/MediaConverters.Tool.csproj @@ -23,7 +23,6 @@ -