VPet/VPet-Simulator.Tool/Program.cs

125 lines
4.0 KiB
C#
Raw Normal View History

2022-12-13 07:10:18 +00:00
using System;
2023-06-16 02:39:35 +00:00
using System.Collections.Generic;
using System.Drawing;
2022-12-13 07:10:18 +00:00
using System.IO;
2023-06-16 02:39:35 +00:00
using System.Linq;
2022-12-13 07:10:18 +00:00
using System.Security.Cryptography;
2023-06-16 02:39:35 +00:00
using System.Xml.Linq;
using VPet_Simulator.Core;
using static VPet_Simulator.Core.GraphCore;
2022-12-13 07:10:18 +00:00
namespace VPet_Simulator.Tool
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("VPet Simulator Tool");
start:
Console.WriteLine("请输入需要使用的功能编号");
Console.WriteLine("1. 精简动画相同图片");
switch (Console.ReadLine())
{
case "1":
2023-05-27 10:37:15 +00:00
Animation();
break;
2023-07-17 15:38:06 +00:00
//case "2":
// FontPetNew();
// break;
2022-12-13 07:10:18 +00:00
default:
Console.WriteLine("暂无该功能");
goto start;
}
}
/// <summary>
/// 将图片重命名并转换成 名字_序号_持续时间 格式
/// </summary>
static void Animation()
{
Console.WriteLine("请输入每张图片的持续时间 (单位: 毫秒)");
string timestr = Console.ReadLine();
2023-05-27 10:37:15 +00:00
if (!int.TryParse(timestr, out int time))
2023-02-22 05:37:23 +00:00
{
time = 125;
}
2023-05-27 10:37:15 +00:00
while (true)
2022-12-13 07:10:18 +00:00
{
2023-05-27 10:37:15 +00:00
Console.WriteLine("请输入图片位置");
DirectoryInfo directoryInfo = new DirectoryInfo(Console.ReadLine());
2023-10-19 09:58:33 +00:00
AnimationReNameFolder(time, directoryInfo);
2023-08-24 19:56:14 +00:00
}
}
2023-10-19 09:58:33 +00:00
static void AnimationReNameFolder(int time, DirectoryInfo directoryInfo)
{
if (directoryInfo.GetFiles("*.png").Length != 0)
AnimationReName(time, directoryInfo);
else
foreach (var fs in directoryInfo.GetDirectories())
{
AnimationReNameFolder(time, fs);
}
}
2023-08-24 19:56:14 +00:00
static void AnimationReName(int time, DirectoryInfo directoryInfo)
{
int id = 0;
int rpt = 1;
string hash = null;
FileInfo lastf = null;
foreach (FileInfo fileInfo in directoryInfo.GetFiles())
{
if (lastf == null)
{
lastf = fileInfo;
hash = GetFileHash(fileInfo);
continue;
}
string filehash = GetFileHash(fileInfo);
if (hash.Equals(filehash))
{
//这个文件和上一个文件的hash值相同这个上个文件
lastf.Delete();
2022-12-13 07:10:18 +00:00
lastf = fileInfo;
2023-08-24 19:56:14 +00:00
rpt++;
continue;
2022-12-13 07:10:18 +00:00
}
2023-08-24 19:56:14 +00:00
hash = filehash;
2023-06-16 02:39:35 +00:00
lastf.MoveTo(Path.Combine(directoryInfo.FullName, $"{GetFileName(lastf)}_{id++:D3}_{rpt * time}.png"));
2023-08-24 19:56:14 +00:00
rpt = 1;
lastf = fileInfo;
2022-12-13 07:10:18 +00:00
}
2023-08-24 19:56:14 +00:00
lastf.MoveTo(Path.Combine(directoryInfo.FullName, $"{GetFileName(lastf)}_{id++:D3}_{rpt * time}.png"));
Console.WriteLine("图片处理已完成");
2022-12-13 07:10:18 +00:00
}
2023-10-19 09:58:33 +00:00
2023-06-16 02:39:35 +00:00
2022-12-13 07:10:18 +00:00
public static string GetFileHash(FileInfo fileInfo)
{
//创建一个哈希算法对象
using (HashAlgorithm hash = HashAlgorithm.Create())
{
using (FileStream file = fileInfo.OpenRead())
{
//哈希算法根据文本得到哈希码的字节数组
return BitConverter.ToString(hash.ComputeHash(file));
}
}
}
2023-06-16 02:39:35 +00:00
public static string GetFileName(FileInfo fileInfo)
{
var strs = fileInfo.Name.Split('_', '-');
if (strs.Length == 1)
{
strs = fileInfo.Name.Replace("00", "_").Split('_');
}
if (strs.Length == 1)
{
return fileInfo.Directory.Name;
}
return strs[0];
}
2022-12-13 07:10:18 +00:00
}
2023-06-16 02:39:35 +00:00
2022-12-13 07:10:18 +00:00
}