Unity 读取一个文件夹中所有图片,并将每张图片保存到Excel中
时间: 2024-10-19 21:13:37 浏览: 20
在Unity中,处理文件操作通常涉及到外部脚本,如C#,因为Unity引擎本身并不直接支持Excel文件的操作。你可以创建一个C#脚本来完成这个任务,步骤如下:
1. 引入必要的库:首先,你需要安装一些NuGet包,例如`EPPlus`用于读写Excel文件,`System.IO.Compression.ZipFile`用于解压缩文件夹。
```csharp
using OfficeOpenXml;
using System.IO;
```
2. 定义读取图片和保存到Excel的方法:
```csharp
private void LoadImagesFromFolderAndSaveToExcel(string folderPath)
{
// 检查文件夹是否存在
if (!Directory.Exists(folderPath))
{
Debug.LogError($"文件夹路径 {folderPath} 不存在");
return;
}
string excelFilePath = "output.xlsx";
ExcelPackage excelPackage = new ExcelPackage(new FileInfo(excelFilePath));
// 获取第一个工作表
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[0];
worksheet.Cells[1, 1].LoadFromValue("Image List");
int row = 2; // 开始从第二行写入
// 遍历文件夹中的图片
foreach (string imagePath in Directory.GetFiles(folderPath, "*.png", SearchOption.AllDirectories))
{
try
{
// 读取图片
Bitmap image = new Bitmap(imagePath);
// 将图片转换为字节数组
byte[] imageData = ImageToByteArray(image);
// 写入Excel
worksheet.Cells[row, 1].LoadFromValue(imagePath);
worksheet.Cells[row++, 2].LoadFromBase64String(Convert.ToBase64String(imageData));
// 清理资源
image.Dispose();
}
catch (Exception ex)
{
Debug.LogError($"处理图片 {imagePath} 出错:{ex.Message}");
}
}
// 保存并关闭Excel
excelPackage.SaveAsync().ContinueWith(t => t.Result);
}
```
3. `ImageToByteArray`函数用于将Bitmap转换为字节数组:
```csharp
private static byte[] ImageToByteArray(Bitmap image)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return ms.ToArray();
}
}
```
4. 调用方法并提供需要的文件夹路径:
```csharp
LoadImagesFromFolderAndSaveToExcel("/path/to/your/image/folder");
```
阅读全文