You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
5.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Text;
using Encoder = System.Drawing.Imaging.Encoder;
namespace SlnMesnac.Common
{
public static class FileHelper
{
#region
/// <summary>
///quality: 0-100 ,越小压缩程度也越高,但是图片质量越低
/// </summary>
/// <param name="imageData"></param>
/// <param name="quality"></param>
/// <returns></returns>
public static byte[] CompressImageData(byte[] imageData, long quality)
{
try
{
using (MemoryStream memoryStream = new MemoryStream(imageData))
{
using (Image image = Image.FromStream(memoryStream))
{
using (MemoryStream compressedStream = new MemoryStream())
{
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
Encoder myEncoder = Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality);
myEncoderParameters.Param[0] = myEncoderParameter;
image.Save(compressedStream, jpgEncoder, myEncoderParameters);
return compressedStream.ToArray();
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"压缩图片出错:{ex.Message}");
return null;
}
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
#endregion
/// <summary>
/// 查找指定目录下的文件
/// </summary>
/// <param name="directoryPath"></param>
/// <param name="photoName"></param>
/// <returns></returns>
public static byte[] FindPhoto(string directoryPath)
{
try
{
// 获取目录中的所有文件
string[] files = Directory.GetFiles(directoryPath);
// 检查是否有文件
if (files.Length == 0)
{
Console.WriteLine("文件夹中没有照片文件");
return null;
}
// 假设这里简单地选择第一个文件作为示例
string firstFile = files[0];
Console.WriteLine($"找到文件:{firstFile}");
// 读取第一个文件的字节数组
byte[] bytes = File.ReadAllBytes(firstFile);
Console.WriteLine($"文件大小:{bytes.Length} 字节");
// 返回照片的字节数组
return bytes;
}
catch (Exception ex)
{
Console.WriteLine($"读取文件夹出错:{ex.Message}");
return null;
}
}
/// <summary>
/// 删除文件夹所有照片
/// </summary>
/// <param name="path"></param>
public static void DeleteAllPictures(string path)
{
try
{
// 检查照片路径是否存在
if (Directory.Exists(path))
{
// 获取文件夹中的所有文件
string[] files = Directory.GetFiles(path);
// 遍历文件并删除
foreach (string file in files)
{
File.Delete(file);
Console.WriteLine($"Deleted file: {file}");
}
Console.WriteLine("All pictures deleted successfully.");
}
else
{
Console.WriteLine("无路径");
}
}
catch (Exception ex)
{
Console.WriteLine($"DeleteAllPictures异常: {ex.Message}");
}
}
public static void SaveImage(byte[] imageData, string imageName, string savePath)
{
// 根据当前日期创建目录路径
string currentDate = DateTime.Now.ToString("yyyy-MM-dd");
string directoryPath = Path.Combine(savePath, currentDate);
// 确保目录存在,如果不存在则创建
Directory.CreateDirectory(directoryPath);
// 将目录路径与照片名称组合
string filePath = Path.Combine(directoryPath, imageName);
try
{
// 将照片字节数组写入文件
File.WriteAllBytes(filePath, imageData);
Console.WriteLine($"图片 '{imageName}' 已成功保存至 '{filePath}'。");
}
catch (Exception ex)
{
Console.WriteLine($"保存图片 '{imageName}' 到 '{filePath}' 时出错: {ex.Message}");
}
}
}
}