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.
92 lines
3.4 KiB
C#
92 lines
3.4 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// 图片压缩
|
|
/// </summary>
|
|
/// <param name="imagePath">图片文件路径</param>
|
|
/// <param name="targetFolder">保存文件夹</param>
|
|
/// <param name="quality">压缩质量</param>
|
|
/// <param name="fileSuffix">压缩后的文件名后缀(防止直接覆盖原文件)</param>
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |