Add rendering of new SVG country flags to PNG, JPEG and WebP.

This commit is contained in:
2018-04-19 07:51:53 +01:00
parent e25f5eacec
commit 3901d698d6
3 changed files with 94 additions and 5 deletions

View File

@@ -29,6 +29,7 @@
*******************************************************************************/
using System;
using Cicm.Database;
using DiscImageChef.Interop;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
@@ -38,7 +39,7 @@ namespace cicm_web
{
public static class Program
{
internal static Cicm.Database.IDbCore Database;
internal static IDbCore Database;
public static void Main(string[] args)
{
@@ -106,7 +107,7 @@ namespace cicm_web
DetectOS.IsMono ? Version.GetMonoVersion() : Version.GetNetCoreVersion());
Console.WriteLine("\u001b[31;1mConnecting to MySQL database...\u001b[0m");
Database = new Cicm.Database.Mysql();
Database = new Mysql();
bool res = Database.OpenDb("localhost", "cicm", "cicm", "cicmpass", 3306);
if(!res)
{
@@ -118,6 +119,13 @@ namespace cicm_web
return;
}
}
DateTime start = DateTime.Now;
Console.WriteLine("\u001b[31;1mRendering new country flags...\u001b[0m");
SvgRender.RenderCountries();
DateTime end = DateTime.Now;
Console.WriteLine("\u001b[31;1mTook \u001b[32;1m{0} seconds\u001b[31;1m...\u001b[0m",
(end - start).TotalSeconds);
Console.WriteLine("\u001b[31;1mStarting web server...\u001b[0m");
BuildWebHost(args).Run();

78
cicm_web/SvgRender.cs Normal file
View File

@@ -0,0 +1,78 @@
using System;
using System.IO;
using SkiaSharp;
using SKSvg = SkiaSharp.Extended.Svg.SKSvg;
namespace cicm_web
{
public static class SvgRender
{
public static void RenderCountries()
{
if(!Directory.Exists("wwwroot/assets/flags/countries")) return;
foreach(string file in Directory.GetFiles("wwwroot/assets/flags/countries/", "*.svg",
SearchOption.TopDirectoryOnly))
{
SKSvg svg = null;
string flagname = Path.GetFileNameWithoutExtension(file);
foreach(string format in new[] {"png", "jpeg", "webp"})
{
if(!Directory.Exists(Path.Combine("wwwroot/assets/flags/countries", format))) ;
Directory.CreateDirectory(Path.Combine("wwwroot/assets/flags/countries", format));
SKEncodedImageFormat skFormat;
switch(format)
{
case "jpeg":
skFormat = SKEncodedImageFormat.Jpeg;
break;
case "webp":
skFormat = SKEncodedImageFormat.Webp;
break;
default:
skFormat = SKEncodedImageFormat.Png;
break;
}
foreach(int multiplier in new[] {1, 2, 3})
{
if(!Directory.Exists(Path.Combine("wwwroot/assets/flags/countries", format, $"{multiplier}x"))
) ;
Directory.CreateDirectory(Path.Combine("wwwroot/assets/flags/countries", format,
$"{multiplier}x"));
string rendered = Path.Combine("wwwroot/assets/flags/countries", format, $"{multiplier}x",
flagname + $".{format}");
if(File.Exists(rendered)) continue;
Console.WriteLine("Rendering {0}", rendered);
if(svg == null)
{
svg = new SKSvg();
svg.Load(file);
}
SKRect svgSize = svg.Picture.CullRect;
float svgMax = Math.Max(svgSize.Width, svgSize.Height);
float canvasMin = 32 * multiplier;
float scale = canvasMin / svgMax;
SKMatrix matrix = SKMatrix.MakeScale(scale, scale);
SKBitmap bitmap = new SKBitmap((int)(svgSize.Width * scale), (int)(svgSize.Height * scale));
SKCanvas canvas = new SKCanvas(bitmap);
canvas.DrawPicture(svg.Picture, ref matrix);
canvas.Flush();
SKImage image = SKImage.FromBitmap(bitmap);
SKData data = image.Encode(skFormat, 100);
FileStream outfs = new FileStream(rendered, FileMode.CreateNew);
data.SaveTo(outfs);
outfs.Close();
}
}
}
}
}
}

View File

@@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<Version>3.0.99.123</Version>
<Version>3.0.99.139</Version>
<Company>Canary Islands Computer Museum</Company>
<Copyright>Copyright © 2003-2018 Natalia Portillo</Copyright>
<Product>Canary Islands Computer Museum Website</Product>
@@ -18,6 +18,9 @@
<PackageReference Include="Microsoft.NETCore.App" Version="2.0.6" />
<PackageReference Include="MSBump" Version="2.3.2" PrivateAssets="All" />
<PackageReference Include="MySql.Data" Version="6.10.6" />
<PackageReference Include="SkiaSharp" Version="1.60.0" />
<PackageReference Include="SkiaSharp.Extended" Version="1.60.0" />
<PackageReference Include="SkiaSharp.Svg" Version="1.60.0" />
<PackageReference Include="Unclassified.NetRevisionTask" Version="0.2.2-beta" />
</ItemGroup>
<ItemGroup>