using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web;
namespace TradeManageNew
{
public class ImageCompress
{
///
/// 图片压缩
///
/// 图片文件路径
/// 保存文件夹
/// 压缩质量
/// 压缩后的文件名后缀(防止直接覆盖原文件)
public static string CompressionImage(string imagePath, string targetFolder, long quality = 100, string fileSuffix = "compress")
{
if (!File.Exists(imagePath))
{
throw new FileNotFoundException();
}
if (!Directory.Exists(targetFolder))
{
Directory.CreateDirectory(targetFolder);
}
var fileInfo = new FileInfo(imagePath);
var fileName = fileInfo.Name.Replace(fileInfo.Extension, "");
var fileFullName = Path.Combine($"{targetFolder}", $"{fileName}_{fileSuffix}{fileInfo.Extension}");
var imageByte = CompressionImage(imagePath, quality);
var ms = new MemoryStream(imageByte);
var image = Image.FromStream(ms);
image.Save(fileFullName);
ms.Close();
ms.Dispose();
image.Dispose();
return fileFullName;
}
private static byte[] CompressionImage(string imagePath, long quality)
{
using (var fileStream = new FileStream(imagePath, FileMode.Open))
{
using (var img = Image.FromStream(fileStream))
{
using (var bitmap = new Bitmap(img))
{
var codecInfo = GetEncoder(img.RawFormat);
var myEncoder = Encoder.Quality;
var myEncoderParameters = new EncoderParameters(1);
var myEncoderParameter = new EncoderParameter(myEncoder, quality);
myEncoderParameters.Param[0] = myEncoderParameter;
using (var ms = new MemoryStream())
{
bitmap.Save(ms, codecInfo, myEncoderParameters);
myEncoderParameters.Dispose();
myEncoderParameter.Dispose();
return ms.ToArray();
}
}
}
}
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
var codecs = ImageCodecInfo.GetImageDecoders();
return codecs.FirstOrDefault(codec => codec.FormatID == format.Guid);
}
public static byte[] CompressImage(string sourcePath)
{
using (Bitmap source = new Bitmap(sourcePath))
{
int newWidth = source.Width / 5;
int newHeight = source.Height / 5;
Bitmap compressed = new Bitmap(source, new Size(newWidth, newHeight));
using (MemoryStream memoryStream = new MemoryStream())
{
compressed.Save(memoryStream, ImageFormat.Jpeg);
return memoryStream.ToArray();
}
}
}
}
}