求一个图片压缩率高一点的方法

hercules135 2015-11-17 04:06:07

public static void thumb(string rSrcImgPath, string rDstImgPath, int width, string lv = "h", int height = 0)
{
//利用Image对象装载源图像
System.Drawing.Image image = System.Drawing.Image.FromFile(rSrcImgPath);

//创建一个System.Drawing.Bitmap对象,并设置你希望的缩略图的宽度和高度。
int thumbWidth, thumbHeight;
double srcWidth = image.Width;
double srcHeight = image.Height;
if (height == 0)//如果高度height为0,则原比例缩放
{
thumbWidth = width;
double d = srcHeight / srcWidth;
thumbHeight = Convert.ToInt32( d * width );
}
else//否则按要求宽高生成
{
thumbWidth = width;
thumbHeight = height;
}
Bitmap bmp = new Bitmap(thumbWidth, thumbHeight);

//从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。
System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp);

if (lv=="h")
{
//设置 System.Drawing.Graphics对象的SmoothingMode属性为HighQuality
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//下面这个也设成高质量
gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
//下面这个设成High
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
}
else if (lv=="m")
{
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;

gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.Default;

gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;

}
else if (lv=="l")
{
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;

gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;

gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Low;
}



//把原始图像绘制成上面所设置宽高的缩小图
System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, thumbWidth, thumbHeight);
gr.DrawImage(image, rectDestination, 0, 0,Convert.ToInt32( srcWidth),Convert.ToInt32( srcHeight), GraphicsUnit.Pixel);

//保存图像,大功告成!
bmp.Save(rDstImgPath);

//最后别忘了释放资源
bmp.Dispose();
image.Dispose();
}


现在用的这个图片压缩方法,感觉质量太高...也就是体积太大,请问有没有压缩的更狠一点的方法,新人求推荐啊
...全文
316 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hercules135 2015-11-17
  • 打赏
  • 举报
回复
引用 5 楼 dongxinxi 的回复:
lv参数给m或者l试试
这个lv是我自己修改后加上去的...效果不明显,所以想请教各位前辈有没有更好的方法
  • 打赏
  • 举报
回复
lv参数给m或者l试试
Poopaye 2015-11-17
  • 打赏
  • 举报
回复
        Bitmap myBitmap;
        ImageCodecInfo myImageCodecInfo;
        Encoder myEncoder;
        EncoderParameter myEncoderParameter;
        EncoderParameters myEncoderParameters;

        // Create a Bitmap object based on a BMP file.
        myBitmap = new Bitmap("Shapes.bmp");

        // 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;

        // Create an EncoderParameters object.

        // An EncoderParameters object has an array of EncoderParameter

        // objects. In this case, there is only one

        // EncoderParameter object in the array.
        myEncoderParameters = new EncoderParameters(1);

        // Save the bitmap as a JPEG file with quality level 25.
        myEncoderParameter = new EncoderParameter(myEncoder, 25L);
        myEncoderParameters.Param[0] = myEncoderParameter;
        myBitmap.Save("Shapes025.jpg", myImageCodecInfo, myEncoderParameters);
xdashewan 2015-11-17
  • 打赏
  • 举报
回复
引用 2 楼 hercules135 的回复:
恩 就是要做缩略图嘛,指定了宽高之后再压缩
搜一下,网上这类很多,至于哪个符合你要求,你只能自己试
hercules135 2015-11-17
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
你这个应该不是压缩而是缩放,需要搜索图片缩放相关资料
恩 就是要做缩略图嘛,指定了宽高之后再压缩
xdashewan 2015-11-17
  • 打赏
  • 举报
回复
你这个应该不是压缩而是缩放,需要搜索图片缩放相关资料

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧