Skip to content

Commit eb3aad6

Browse files
committed
提供简便的转换实现逻辑
1 parent cb398ce commit eb3aad6

2 files changed

Lines changed: 54 additions & 58 deletions

File tree

src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/Optimizations/EnhancedGraphicsMetafileOptimization.cs

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,63 @@ namespace DotNetCampus.MediaConverter.SkiaWmfRenderer.Optimizations;
1313
/// </summary>
1414
public static class EnhancedGraphicsMetafileOptimization
1515
{
16+
/// <summary>
17+
/// 尝试将矢量图文件(SVG/WMF/EMF)转换为 PNG 文件
18+
/// </summary>
19+
/// <param name="context"></param>
20+
/// <param name="result"></param>
21+
/// <returns></returns>
22+
public static bool TryOptimizeSvgOrWmf(EnhancedGraphicsMetafileOptimizationContext context,
23+
out EnhancedGraphicsMetafileOptimizationResult result)
24+
{
25+
if (IsExtension(".svg"))
26+
{
27+
// 如果是 svg 那就直接转换了,因为后续叠加特效等逻辑都不能支持 SVG 格式
28+
try
29+
{
30+
var outputFilePath = SvgFileOptimization.ConvertSvgToPngFile(in context);
31+
result = new EnhancedGraphicsMetafileOptimizationResult()
32+
{
33+
OptimizedImageFile = outputFilePath,
34+
};
35+
}
36+
catch (Exception e)
37+
{
38+
context.LogMessage($"Convert SVG to PNG failed: {e}");
39+
40+
result = EnhancedGraphicsMetafileOptimizationResult.FailException(e);
41+
}
42+
43+
return true;
44+
}
45+
else if (IsExtension(".wmf") ||
46+
IsExtension(".emf"))
47+
{
48+
result = ConvertWmfOrEmfToPngFile(in context);
49+
50+
return true;
51+
}
52+
53+
result = default;
54+
return false;
55+
56+
bool IsExtension(string extension)
57+
{
58+
return string.Equals(context.ImageFile.Extension, extension, StringComparison.OrdinalIgnoreCase);
59+
}
60+
}
61+
1662
/// <summary>
1763
/// 将 WMF 或 EMF 文件转换为 PNG 文件。根据当前运行平台选择合适的转换实现。
1864
/// </summary>
1965
/// <param name="context">包含要转换文件和工作目录等设置的上下文。</param>
2066
/// <returns>转换操作的结果,包含生成的文件或错误信息。</returns>
21-
public static EnhancedGraphicsMetafileOptimizationResult ConvertWmfOrEmfToPngFile(EnhancedGraphicsMetafileOptimizationContext context)
67+
public static EnhancedGraphicsMetafileOptimizationResult ConvertWmfOrEmfToPngFile(in EnhancedGraphicsMetafileOptimizationContext context)
2268
{
2369
// 在 Windows 上,直接使用 GDI+ 将 WMF 或 EMF 文件转换为 PNG 文件
2470
if (OperatingSystem.IsWindowsVersionAtLeast(6, 1))
2571
{
26-
return ConvertInWindows(context);
72+
return ConvertInWindows(in context);
2773
}
2874

2975
if (OperatingSystem.IsLinux())
@@ -73,7 +119,7 @@ private static EnhancedGraphicsMetafileOptimizationResult ConvertInLinux(Enhance
73119
}
74120

75121
// 使用 SkiaWmfRenderer 进行转换
76-
result = ConvertWithSkiaWmfRenderer(context);
122+
result = ConvertWithSkiaWmfRenderer(in context);
77123
if (result.IsSuccess)
78124
{
79125
return result;
@@ -86,7 +132,7 @@ private static EnhancedGraphicsMetafileOptimizationResult ConvertInLinux(Enhance
86132

87133
// 使用 libwmf 进行转换
88134

89-
result = ConvertWithLibWmf(context);
135+
result = ConvertWithLibWmf(in context);
90136
if (result.OptimizedImageFile is { } svgLibWmfFile)
91137
{
92138
return ConvertSvgToPngFile(svgLibWmfFile);
@@ -130,7 +176,7 @@ EnhancedGraphicsMetafileOptimizationResult ConvertSvgToPngFile(FileInfo svgImage
130176
/// </summary>
131177
/// <param name="context">包含输入文件、输出目录和尺寸限制等信息的上下文。</param>
132178
/// <returns>如果转换成功则返回包含输出 PNG 文件的结果,否则返回不支持或失败的结果。</returns>
133-
private static EnhancedGraphicsMetafileOptimizationResult ConvertWithSkiaWmfRenderer(EnhancedGraphicsMetafileOptimizationContext context)
179+
private static EnhancedGraphicsMetafileOptimizationResult ConvertWithSkiaWmfRenderer(in EnhancedGraphicsMetafileOptimizationContext context)
134180
{
135181
int requestWidth = context.MaxImageWidth ?? 0;
136182
int requestHeight = context.MaxImageHeight ?? 0;
@@ -162,7 +208,7 @@ private static EnhancedGraphicsMetafileOptimizationResult ConvertWithSkiaWmfRend
162208
}
163209

164210
[SupportedOSPlatform("linux")]
165-
private static EnhancedGraphicsMetafileOptimizationResult ConvertWithLibWmf(EnhancedGraphicsMetafileOptimizationContext context)
211+
private static EnhancedGraphicsMetafileOptimizationResult ConvertWithLibWmf(in EnhancedGraphicsMetafileOptimizationContext context)
166212
{
167213
var file = context.ImageFile;
168214
var workingFolder = context.WorkingFolder;
@@ -297,7 +343,7 @@ private static EnhancedGraphicsMetafileOptimizationResult ConvertWithInkscape(En
297343
}
298344

299345
[SupportedOSPlatform("windows6.1")]
300-
private static EnhancedGraphicsMetafileOptimizationResult ConvertInWindows(EnhancedGraphicsMetafileOptimizationContext context)
346+
private static EnhancedGraphicsMetafileOptimizationResult ConvertInWindows(in EnhancedGraphicsMetafileOptimizationContext context)
301347
{
302348
var file = context.ImageFile;
303349
var workingFolder = context.WorkingFolder;

src/MediaConverters/SkiaWmfRenderer/src/SkiaWmfRenderer/Optimizations/SvgFileOptimization.cs

Lines changed: 1 addition & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -9,62 +9,12 @@ namespace DotNetCampus.MediaConverter.SkiaWmfRenderer.Optimizations;
99
/// </summary>
1010
public static class SvgFileOptimization
1111
{
12-
/*
13-
if (IsExtension(".svg"))
14-
{
15-
// 如果是 svg 那就直接转换了,因为后续叠加特效等逻辑都不能支持 SVG 格式
16-
try
17-
{
18-
var outputFilePath = ConvertSvgToPngFile(context);
19-
if (outputFilePath is null)
20-
{
21-
return new ImageFileOptimizationResult()
22-
{
23-
OptimizedImageFile = null,
24-
FailureReason = ImageFileOptimizationFailureReason.NotSupported
25-
};
26-
}
27-
else
28-
{
29-
context.LogMessage($"Success ConvertSvgToPngFile. Update current image file to '{outputFilePath.FullName}'");
30-
context = context with
31-
{
32-
ImageFile = outputFilePath
33-
};
34-
}
35-
}
36-
catch (Exception e)
37-
{
38-
context.LogMessage($"Convert SVG to PNG failed: {e}");
39-
40-
return ImageFileOptimizationResult.FailException(e);
41-
}
42-
}
43-
else if (IsExtension(".wmf") ||
44-
IsExtension(".emf"))
45-
{
46-
var result = EnhancedGraphicsMetafileOptimization.ConvertWmfOrEmfToPngFile(context);
47-
if (result.OptimizedImageFile is not null)
48-
{
49-
context.LogMessage($"Success ConvertWmfOrEmfToPngFile. Update current image file to '{result.OptimizedImageFile}'");
50-
context = context with
51-
{
52-
ImageFile = result.OptimizedImageFile
53-
};
54-
}
55-
else
56-
{
57-
return result;
58-
}
59-
}
60-
*/
61-
6212
/// <summary>
6313
/// 将指定上下文中的 SVG 文件渲染并保存为 PNG 文件。
6414
/// </summary>
6515
/// <param name="context">包含 SVG 文件和工作目录等信息的上下文。</param>
6616
/// <returns>成功时返回生成的 PNG 文件信息;失败时返回 null。</returns>
67-
public static FileInfo? ConvertSvgToPngFile(EnhancedGraphicsMetafileOptimizationContext context)
17+
public static FileInfo? ConvertSvgToPngFile(in EnhancedGraphicsMetafileOptimizationContext context)
6818
{
6919
var imageFile = context.ImageFile;
7020
var workingFolder = context.WorkingFolder;

0 commit comments

Comments
 (0)