今天老大讓做一個圖片壓縮功能,自己在網(wǎng)上找了一些解決方法,也同時對方法進行了提煉!
在下面的代碼中會有一個字段Encoder.Quality 字段,這個對應的有個一個values是神奇的值
MSDN解釋是:Quality 類別將指定的圖像壓縮級別。 在用于構(gòu)造 EncoderParameter, ,質(zhì)量類別的有用值的范圍是從 0 到 100。 指定的數(shù)字越,越高壓縮和圖像質(zhì)量也因此越低。 零將為您提供最低的圖像質(zhì)量和 100 最高。
當將一個參數(shù)傳遞給圖像編碼器中時,將參數(shù)封裝在 EncoderParameter 對象。 域中的一個 EncoderParameter 對象是指定的參數(shù)的類別的 GUID。 使用的靜態(tài)字段 Encoder 類來檢索 Encoder ,其中包含參數(shù)的所需類別。
內(nèi)置的圖像編碼器 GDI+ 接收屬于多個類別的參數(shù)。 下表列出了所有類別,每個類別關(guān)聯(lián)的 GUID。
里面有6個方法,如下
方法作用方法名
| 按質(zhì)量比和尺寸收縮唄數(shù),生成縮略圖,保存為另外路勁 | getThumImage(String sourceFile, long quality, int multiple, String outputFile) |
| 按質(zhì)量比和尺寸收縮唄數(shù),生成縮略圖;保存在同一路徑 | getThumImage(String sourceFile, long quality, int multiple) |
| 按圖片尺寸大小壓縮圖片 ,保存在不同路徑 | ImageByMultiple(String sourceFile, int multiple, String outputFile) |
| 按圖片尺寸大小壓縮圖片 ,保存在同一路徑 | ImageByMultiple(String sourceFile, int multiple) |
| 質(zhì)量壓縮比,保存在不同一路徑 | ImageByQuality(String sourceFile, int quality, String outputFile) |
| 按質(zhì)量壓縮比壓縮圖片,保存在同一路徑 | ImageByQuality(String sourceFile, int quality) |
public partial class WebForm2 : System.Web.UI.Page{
protected void Page_Load(
object sender, EventArgs e){GetFileInfo(
@"D:\tupian");}
private void GetFileInfo(
string filePath){DirectoryInfo directoryInfo =
new DirectoryInfo(filePath);
try{
foreach (DirectoryInfo childDirectoryInfo
in directoryInfo.GetDirectories()){
string name = childDirectoryInfo.Name.ToString();GetFileInfo(filePath +
"\\" + childDirectoryInfo.Name.ToString());}
foreach (FileInfo fileInfo
in directoryInfo.GetFiles()){
if (fileInfo.Length >
400 *
1024){FixSize(fileInfo.FullName,
200,
100, fileInfo.FullName);}}}
catch{}}
#region 調(diào)用圖片處理的方法public static bool getThumImage(String sourceFile,
long quality,
int multiple, String outputFile){
bool flag =
false;
try{flag = ThumImage(sourceFile, quality, multiple, outputFile);}
catch{flag =
false;}
return flag;}
public static bool getThumImage(String sourceFile,
long quality,
int multiple){
bool flag =
false;
try{flag = ThumImage(sourceFile, quality, multiple, sourceFile);}
catch{flag =
false;}
return flag;}
public static bool ImageByMultiple(String sourceFile,
int multiple, String outputFile){
bool flag =
false;
try{flag = ThumImageByMultiple(sourceFile, multiple, outputFile);}
catch{flag =
false;}
return flag;}
public static bool ImageByMultiple(String sourceFile,
int multiple){
bool flag =
false;
try{flag = ThumImageByMultiple(sourceFile, multiple, sourceFile);}
catch{flag =
false;}
return flag;}
public static bool ImageByQuality(String sourceFile,
int quality, String outputFile){
bool flag =
false;
try{flag = ThumImageByQuality(sourceFile, quality, outputFile);}
catch{flag =
false;}
return flag;}
public static bool ImageByQuality(String sourceFile,
int quality){
bool flag =
false;
try{flag = ThumImageByQuality(sourceFile, quality, sourceFile);}
catch{flag =
false;}
return flag;}
#endregion#region 調(diào)用圖片處理具體方法private static bool ThumImageByQuality(String sourceFile,
long quality, String outputFile){
bool flag =
false;
try{
long imageQuality = quality;Bitmap sourceImage =
new Bitmap(sourceFile);ImageCodecInfo myImageCodecInfo = GetEncoderInfo(
"image/jpeg");System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;EncoderParameters myEncoderParameters =
new EncoderParameters(
1);EncoderParameter myEncoderParameter =
new EncoderParameter(myEncoder, imageQuality);myEncoderParameters.Param[
0] = myEncoderParameter;
float xWidth = sourceImage.Width;
float yWidth = sourceImage.Height;Bitmap newImage =
new Bitmap((
int)(xWidth), (
int)(yWidth));Graphics g = Graphics.FromImage(newImage);g.DrawImage(sourceImage,
0,
0, xWidth, yWidth);sourceImage.Dispose();g.Dispose();newImage.Save(outputFile, myImageCodecInfo, myEncoderParameters);flag =
true;}
catch{flag =
false;}
return flag;}
private static bool ThumImage(String sourceFile,
long quality,
int multiple, String outputFile){
bool flag =
false;
try{
long imageQuality = quality;Bitmap sourceImage =
new Bitmap(sourceFile);ImageCodecInfo myImageCodecInfo = GetEncoderInfo(
"image/jpeg");System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;EncoderParameters myEncoderParameters =
new EncoderParameters(
1);EncoderParameter myEncoderParameter =
new EncoderParameter(myEncoder, imageQuality);myEncoderParameters.Param[
0] = myEncoderParameter;
float xWidth = sourceImage.Width;
float yWidth = sourceImage.Height;Bitmap newImage =
new Bitmap((
int)(xWidth / multiple), (
int)(yWidth / multiple));Graphics g = Graphics.FromImage(newImage);g.DrawImage(sourceImage,
0,
0, xWidth / multiple, yWidth / multiple);sourceImage.Dispose();g.Dispose();newImage.Save(outputFile, myImageCodecInfo, myEncoderParameters);flag =
true;}
catch{flag =
false;}
return flag;}
public static bool ThumImageByMultiple(String sourceFile,
int multiple, String outputFile){
try{Bitmap sourceImage =
new Bitmap(sourceFile);ImageCodecInfo myImageCodecInfo = GetEncoderInfo(
"image/jpeg");
float xWidth = sourceImage.Width;
float yWidth = sourceImage.Height;Bitmap newImage =
new Bitmap((
int)(xWidth / multiple), (
int)(yWidth / multiple));Graphics g = Graphics.FromImage(newImage);g.DrawImage(sourceImage,
0,
0, xWidth / multiple, yWidth / multiple);sourceImage.Dispose();g.Dispose();newImage.Save(outputFile);
return true;}
catch{
return false;}}
public static bool FixSize(String sourceFile,
int xWidth,
int yWidth, String outputFile){
try{Bitmap sourceImage =
new Bitmap(sourceFile);ImageCodecInfo myImageCodecInfo = GetEncoderInfo(
"image/jpeg");Bitmap newImage =
new Bitmap((
int)(xWidth), (
int)(yWidth));Graphics g = Graphics.FromImage(newImage);g.DrawImage(sourceImage,
0,
0, xWidth, yWidth);sourceImage.Dispose();g.Dispose();newImage.Save(outputFile);
return true;}
catch{
return false;}}
#endregion getThumImageprivate static ImageCodecInfo
GetEncoderInfo(String mimeType){
int j;ImageCodecInfo[] encoders;encoders = ImageCodecInfo.GetImageEncoders();
for (j =
0; j < encoders.Length; ++j){
if (encoders[j].MimeType == mimeType)
return encoders[j];}
return null;}}
總結(jié)
以上是生活随笔為你收集整理的C# 图片压缩处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。