自動轉換生成 iOS 與 Android 使用的各種不同尺寸之應用程式 Icon
附加名稱 | DPI | 放大倍率 |
mdpi | 160 | 1× |
hdpi | 240 | 1.5× |
xhdpi | 320 | 2× |
xxhdpi | 480 | 3× |
xxxhdpi | 640 | 4× |
| | |
namespace AppIconBuilder
{
public class iOSImageDefinition
{
public List<iOSImageItem> Images { get; set; }
public Info info { get; set; }
public void CalculateSize()
{
foreach (var item in Images)
{
item.CalculateSize();
}
}
public void GenerateIcons(string mainPath)
{
if (Directory.Exists(mainPath) == false)
{
Directory.CreateDirectory(mainPath);
}
foreach (var item in Images)
{
using (Image<Rgba32> image = Image.Load("icon.png"))
{
image.Mutate(x => x
.Resize((int)item.Width, (int)item.Height));
string filename = Path.Combine(mainPath, item.Filename);
image.Save(filename);
}
}
}
}
public class iOSImageItem
{
public string Idiom { get; set; }
public string Size { get; set; }
public string Scale { get; set; }
public string Filename { get; set; }
public double Width { get; set; }
public double Height { get; set; }
public void CalculateSize()
{
var fooSize = Convert.ToDouble(Size.Split('x')[0]);
var fooScale = Convert.ToInt32(Scale.Replace("x", ""));
Width = fooSize * fooScale;
Height = fooSize * fooScale;
}
}
public class Info
{
public int Version { get; set; }
public string Author { get; set; }
}
}
namespace AppIconBuilder
{
public class AndroidImageDefinition
{
public List<AndroidImageItem> Images { get; set; }
public void Initialization()
{
Images = new List<AndroidImageItem>();
Images.Add(new AndroidImageItem()
{
Path = "mipmap-hdpi",
Filename = "ic_launcher.png",
Width = 72,
Height = 72,
});
Images.Add(new AndroidImageItem()
{
Path = "mipmap-ldpi",
Filename = "ic_launcher.png",
Width = 36,
Height = 36,
});
Images.Add(new AndroidImageItem()
{
Path = "mipmap-mdpi",
Filename = "ic_launcher.png",
Width = 48,
Height = 48,
});
Images.Add(new AndroidImageItem()
{
Path = "mipmap-xhdpi",
Filename = "ic_launcher.png",
Width = 96,
Height = 96,
});
Images.Add(new AndroidImageItem()
{
Path = "mipmap-xxhdpi",
Filename = "ic_launcher.png",
Width = 144,
Height = 144,
});
Images.Add(new AndroidImageItem()
{
Path = "mipmap-xxxhdpi",
Filename = "ic_launcher.png",
Width = 192,
Height = 192,
});
}
public void ChangeRole()
{
foreach (var item in Images)
{
item.Path = item.Path.Replace("mipmap", "drawable");
item.Filename = item.Filename.Replace("ic_launcher", "icon");
}
}
public void GenerateIcons(string mainPath)
{
foreach (var item in Images)
{
string path = Path.Combine(mainPath, item.Path);
if (Directory.Exists(path) == false)
{
Directory.CreateDirectory(path);
}
using (Image<Rgba32> image = Image.Load("icon.png"))
{
image.Mutate(x => x
.Resize((int)item.Width, (int)item.Height));
string filename = Path.Combine(path, item.Filename);
image.Save(filename);
}
}
}
}
public class AndroidImageItem
{
public string Filename { get; set; }
public string Path { get; set; }
public double Width { get; set; }
public double Height { get; set; }
}
}
namespace AppIconBuilder
{
class Program
{
static async Task Main(string[] args)
{
string mainPath = "iOS";
var fooContents = await File.ReadAllTextAsync("Contents.json");
iOSImageDefinition imageDefinition = JsonConvert.DeserializeObject<iOSImageDefinition>(fooContents);
imageDefinition.CalculateSize();
imageDefinition.GenerateIcons(mainPath);
mainPath = "Android_Launcher";
AndroidImageDefinition androidImageDefinition = new AndroidImageDefinition();
androidImageDefinition.Initialization();
androidImageDefinition.GenerateIcons(mainPath);
mainPath = "Android_Resource";
androidImageDefinition.ChangeRole();
androidImageDefinition.GenerateIcons(mainPath);
Console.WriteLine("Press any key for continuing...");
Console.ReadKey();
}
}
}