C# 進(jìn)行圖片壓縮的示例代碼(對(duì)jpg壓縮效果最好)
直接上代碼
public static class ImageCompress
{
/// <summary>
/// 圖片壓縮
/// </summary>
/// <param name="imagePath">圖片文件路徑</param>
/// <param name="targetFolder">保存文件夾</param>
/// <param name="quality">壓縮質(zhì)量</param>
/// <param name="fileSuffix">壓縮后的文件名后綴(防止直接覆蓋原文件)</param>
public static void 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();
}
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);
}
}
調(diào)用方法(WPF為例)
private void Button_Click(object sender, RoutedEventArgs e)
{
var fileDialog = new OpenFileDialog();
var fileSelect = "";
if (fileDialog.ShowDialog(this)==true)
{
fileSelect = fileDialog.FileName;
}
if(string.IsNullOrWhiteSpace(fileSelect)) return;
ImageCompress.CompressionImage(fileSelect,@"d:\",50);
}
以上就是C# 進(jìn)行圖片壓縮的示例代碼(對(duì)jpg壓縮效果最好)的詳細(xì)內(nèi)容,更多關(guān)于c# 圖片壓縮的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Unity中Mask和RectMask2D組件的對(duì)比與測(cè)試
本篇文章給大家介紹Unity中Mask和RectMask2D組件的對(duì)比與測(cè)試,包括組件用法及RectMask2D的基本用法,通過(guò)Mask的原理分析實(shí)例代碼相結(jié)合給大家講解的非常詳細(xì),需要的朋友參考下吧2021-06-06
C# 執(zhí)行CMD命令并接收返回結(jié)果的操作方式
這篇文章主要介紹了C# 執(zhí)行CMD命令并接收返回結(jié)果的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
C#計(jì)算程序執(zhí)行過(guò)程花費(fèi)時(shí)間的方法
這篇文章主要介紹了C#計(jì)算程序執(zhí)行過(guò)程花費(fèi)時(shí)間的方法,涉及C#簡(jiǎn)單的時(shí)間運(yùn)算技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
C#實(shí)現(xiàn)單鏈表(線性表)完整實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)單鏈表(線性表)的方法,結(jié)合完整實(shí)例形式分析了單鏈表的原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-06-06
深入理解C# abstract和virtual關(guān)鍵字
深入理解C# abstract和virtual關(guān)鍵字,學(xué)習(xí)c#的朋友可以參考下。2011-06-06
.NET使用C#導(dǎo)入Excel文件數(shù)據(jù)到數(shù)據(jù)庫(kù)
將Excel文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中不僅能夠提升數(shù)據(jù)處理的效率和準(zhǔn)確性,還能極大地促進(jìn)數(shù)據(jù)分析和決策制定的過(guò)程,本文將介紹如何在.NET平臺(tái)使用C#導(dǎo)入Excel文件數(shù)據(jù)到數(shù)據(jù)庫(kù)中,需要的可以參考下2024-12-12
C# 建造者模式(Builder Pattern)詳細(xì)講解
建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,通過(guò)將復(fù)雜對(duì)象的構(gòu)建過(guò)程與其表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示,它適用于構(gòu)建過(guò)程復(fù)雜且涉及多個(gè)步驟的場(chǎng)景,本文介紹C# 建造者模式(Builder Pattern)詳細(xì)講解,感興趣的朋友一起看看吧2025-03-03

