mirror of
https://github.com/claunia/marechai.git
synced 2025-12-16 19:14:25 +00:00
Add rendering of new SVG country flags to PNG, JPEG and WebP.
This commit is contained in:
@@ -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
78
cicm_web/SvgRender.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user