目录
简单的介绍
图像压缩类
简单的介绍
某宝店铺上传图片时,要求单张图片大小不能大于3M。而现在的手机像素越来越高,一张图片的字节数也越来越大。
在遇到需要大量上传图片时,那可真是苦不堪言呀。
为了满足本人懒惰的性格,就研究了一下可以根据所给的文件夹目录,自动查找所有的图片,并根据指定的压缩百分比和大小,批量压缩,并一比一存放在指定文件夹内。如图:
快压缩结束了
压缩完成弹出提示框
两个目录下的文件夹对比
图片大小对比
文件数量对比
图像压缩类
class Compression
{
private 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;
}
/// <summary>
/// 通过质量压缩图片
/// </summary>
/// <param name="iSource">传入的Bitmap对象</param>
/// <param name="cStream">压缩后的Stream对象</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
public static void Compress(Bitmap iSource, Stream cStream, long level)
{
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
// Get an ImageCodecInfo object that represents the JPEG codec.
myImageCodecInfo = GetEncoderInfo("image/jpeg");
// Create an Encoder object based on the GUID
// for the Quality parameter category.
myEncoder = Encoder.Quality;
// 创建一个 EncoderParameters 对象.
// 一个 EncoderParameters 对象有一组EncoderParameter对象
// 在下面的代码中,EncoderParameters数组中只有一个EncoderParameter对象
myEncoderParameters = new EncoderParameters(1);
// 用给定的Level值压缩图片
myEncoderParameter = new EncoderParameter(myEncoder, level);
myEncoderParameters.Param[0] = myEncoderParameter;
iSource.Save(cStream, myImageCodecInfo, myEncoderParameters);
}
/// <summary>
/// 通过递归的方式,以起点level 和 终点 图像字节长度length 对图像进行压缩
/// </summary>
/// <param name="srcBitMap">传入的Bitmap对象</param>
/// <param name="destFile">压缩后的图片保存路径</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
/// <param name="length">终点长度 单位字节; 1024字节 = 1kb ; 1024kb = 1MB </param>
public static void Compress(Bitmap srcBitMap, string destFile, long level,long length)
{
Stream s = new FileStream(destFile, FileMode.Create);
Compress(srcBitMap, s, level);
if (s.Length > length)
{
s.Close();
if(File.Exists(destFile))
{
File.Delete(destFile);
}
Compress(srcBitMap, destFile, --level, length);
}
s.Close();
srcBitMap.Dispose();
}
}
【有觉得需要其他压缩功能可以发表评论,本人能力够的话可以做到这个小工具里,其他功能也会持续更新】