C#图片压缩处理

时间:2022-11-16 18:57:14

最近在做相册功能遇到一个问题,就是加载图片的时候然后放大,感觉有点卡。图片可能有点大,所以考虑用缩略图来实现。

也就是在查询出来一个相册图片  ,一页显示几十张,这几十张用缩略图来显示,看相信情况的时候想QQ相册样加载原图放大拉取图片相关信息。所用到的技术就是图片压缩功能。现在功能已经实现看代码。

[csharp]  view plain  copy  print ? C#图片压缩处理 C#图片压缩处理
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9. using System.Drawing.Imaging;  
  10. using System.IO;  
  11.   
  12. namespace WindowsFormsApplication1  
  13. {  
  14.     public partial class Form1 : Form  
  15.     {  
  16.         public Form1()  
  17.         {  
  18.             InitializeComponent();  
  19.         }  
  20.   
  21.         private void button1_Click(object sender, EventArgs e)  
  22.         {  
  23.   
  24.             string pathPerc = @"D:\0046620140807150650cin.jpg";  
  25.             string source = @"G:\0046620140807150650cin.jpg";  
  26.             if (!File.Exists(pathPerc))  
  27.             {  
  28.                 File.Create(pathPerc).Close();  
  29.             }  
  30.             else  
  31.             {  
  32.                 File.Delete(pathPerc);  
  33.                 File.Create(pathPerc).Close();  
  34.             }  
  35.             getThumImage(source, 18, 3, pathPerc);  
  36.         }  
  37.  
  38.         #region getThumImage  
  39.         /**/  
  40.         /// <summary>  
  41.         /// 生成缩略图  
  42.         /// </summary>  
  43.         /// <param name="sourceFile">原始图片文件</param>  
  44.         /// <param name="quality">质量压缩比</param>  
  45.         /// <param name="multiple">收缩倍数</param>  
  46.         /// <param name="outputFile">输出文件名</param>  
  47.         /// <returns>成功返回true,失败则返回false</returns>  
  48.         public static bool getThumImage(String sourceFile, long quality, int multiple, String outputFile)  
  49.         {  
  50.             try  
  51.             {  
  52.                 long imageQuality = quality;  
  53.                 Bitmap sourceImage = new Bitmap(sourceFile);  
  54.                 ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");  
  55.                 System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;  
  56.                 EncoderParameters myEncoderParameters = new EncoderParameters(1);  
  57.                 EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, imageQuality);  
  58.                 myEncoderParameters.Param[0] = myEncoderParameter;  
  59.                 float xWidth = sourceImage.Width;  
  60.                 float yWidth = sourceImage.Height;  
  61.                 Bitmap newImage = new Bitmap((int)(xWidth / multiple), (int)(yWidth / multiple));  
  62.                 Graphics g = Graphics.FromImage(newImage);  
  63.   
  64.                 g.DrawImage(sourceImage, 0, 0, xWidth / multiple, yWidth / multiple);  
  65.                 g.Dispose();  
  66.                 newImage.Save(outputFile, myImageCodecInfo, myEncoderParameters);  
  67.                 return true;  
  68.             }  
  69.             catch  
  70.             {  
  71.                 return false;  
  72.             }  
  73.         }  
  74.         #endregion getThumImage  
  75.   
  76.         /**/  
  77.         /// <summary>  
  78.         /// 获取图片编码信息  
  79.         /// </summary>  
  80.         private static ImageCodecInfo GetEncoderInfo(String mimeType)  
  81.         {  
  82.             int j;  
  83.             ImageCodecInfo[] encoders;  
  84.             encoders = ImageCodecInfo.GetImageEncoders();  
  85.             for (j = 0; j < encoders.Length; ++j)  
  86.             {  
  87.                 if (encoders[j].MimeType == mimeType)  
  88.                     return encoders[j];  
  89.             }  
  90.             return null;  
  91.         }  
  92.   
  93.   
  94.     }  
  95. }  



看下压缩后的图片如下 C#图片压缩处理


11KB

压缩前的图片C#图片压缩处理


这样缩略图就成功了。