| File: ResizeImageInfo.cs | Web Access |
| Project: src\src\SingleProject\Resizetizer\src\Resizetizer.csproj (Microsoft.Maui.Resizetizer) |
#nullable enable using System; using System.Collections.Generic; using System.Globalization; using System.IO; using Microsoft.Build.Framework; using SkiaSharp; namespace Microsoft.Maui.Resizetizer { internal class ResizeImageInfo { public string? ItemSpec { get; set; } public string? Alias { get; set; } public string? Filename { get; set; } public string OutputName => string.IsNullOrWhiteSpace(Alias) ? string.IsNullOrWhiteSpace(Filename) ? Path.GetFileNameWithoutExtension(ForegroundFilename) : Path.GetFileNameWithoutExtension(Filename) : Path.GetFileNameWithoutExtension(Alias); public string OutputExtension => string.IsNullOrWhiteSpace(Alias) || !Path.HasExtension(Alias) ? string.IsNullOrWhiteSpace(Filename) || !Path.HasExtension(Filename) ? Path.GetExtension(ForegroundFilename) : Path.GetExtension(Filename) : Path.GetExtension(Alias); public bool OutputIsVector => IsVectorExtension(OutputExtension); public SKSize? BaseSize { get; set; } public bool Resize { get; set; } = true; public SKColor? TintColor { get; set; } public SKColor? Color { get; set; } public bool IsVector => IsVectorFilename(Filename); public bool IsAppIcon { get; set; } public string? ForegroundFilename { get; set; } public bool ForegroundIsVector => IsVectorFilename(ForegroundFilename); public double ForegroundScale { get; set; } = 1.0; private static bool IsVectorFilename(string? filename) => IsVectorExtension(Path.GetExtension(filename)); private static bool IsVectorExtension(string? extension) => extension?.Equals(".svg", StringComparison.OrdinalIgnoreCase) ?? false; public static List<ResizeImageInfo> Parse(IEnumerable<ITaskItem> images) { var r = new List<ResizeImageInfo>(); if (images == null) return r; foreach (var image in images) { var info = Parse(image); r.Add(info); } return r; } public static ResizeImageInfo Parse(ITaskItem image) { var info = new ResizeImageInfo(); info.ItemSpec = image.ItemSpec; var fileInfo = new FileInfo(image.GetMetadata("FullPath")); if (!fileInfo.Exists) throw new FileNotFoundException("Unable to find background file: " + fileInfo.FullName, fileInfo.FullName); info.Filename = fileInfo.FullName; info.Alias = image.GetMetadata("Link"); info.BaseSize = Utils.ParseSizeString(image.GetMetadata("BaseSize")); if (bool.TryParse(image.GetMetadata("Resize"), out var rz)) { info.Resize = rz; } else if (info.BaseSize == null && !info.IsVector) { // By default do not resize non-vector images info.Resize = false; } var tintColor = image.GetMetadata("TintColor"); info.TintColor = Utils.ParseColorString(tintColor); if (info.TintColor is null && !string.IsNullOrEmpty(tintColor)) throw new InvalidDataException($"Unable to parse color value '{tintColor}' for '{info.Filename}'."); var color = image.GetMetadata("Color"); info.Color = Utils.ParseColorString(color); if (info.Color is null && !string.IsNullOrEmpty(color)) throw new InvalidDataException($"Unable to parse color value '{color}' for '{info.Filename}'."); if (bool.TryParse(image.GetMetadata("IsAppIcon"), out var iai)) info.IsAppIcon = iai; if (float.TryParse(image.GetMetadata("ForegroundScale"), NumberStyles.Number, CultureInfo.InvariantCulture, out var fsc)) info.ForegroundScale = fsc; var fgFile = image.GetMetadata("ForegroundFile"); if (!string.IsNullOrEmpty(fgFile)) { var fgFileInfo = new FileInfo(fgFile); if (!fgFileInfo.Exists) throw new FileNotFoundException("Unable to find foreground file: " + fgFileInfo.FullName, fgFileInfo.FullName); info.ForegroundFilename = fgFileInfo.FullName; } // make sure the image is a foreground if this is an icon if (info.IsAppIcon && string.IsNullOrEmpty(info.ForegroundFilename)) { info.ForegroundFilename = info.Filename; info.Filename = null; } // TODO: // - Parse out custom DPI's return info; } } }