直接上代码

 1     public static class ImageCompress
2 {
3 /// <summary>
4 /// 图片压缩
5 /// </summary>
6 /// <param name="imagePath">图片文件路径</param>
7 /// <param name="targetFolder">保存文件夹</param>
8 /// <param name="quality">压缩质量</param>
9 /// <param name="fileSuffix">压缩后的文件名后缀(防止直接覆盖原文件)</param>
10 public static void CompressionImage(string imagePath, string targetFolder, long quality = 100, string fileSuffix = "compress")
11 {
12 if (!File.Exists(imagePath))
13 {
14 throw new FileNotFoundException();
15 }
16 if (!Directory.Exists(targetFolder))
17 {
18 Directory.CreateDirectory(targetFolder);
19 }
20 var fileInfo = new FileInfo(imagePath);
21 var fileName = fileInfo.Name.Replace(fileInfo.Extension, "");
22 var fileFullName = Path.Combine($"{targetFolder}", $"{fileName}_{fileSuffix}{fileInfo.Extension}");
23
24 var imageByte = CompressionImage(imagePath, quality);
25 var ms = new MemoryStream(imageByte);
26 var image = Image.FromStream(ms);
27 image.Save(fileFullName);
28 ms.Close();
29 ms.Dispose();
30 image.Dispose();
31 }
32 private static byte[] CompressionImage(string imagePath, long quality)
33 {
34 using (var fileStream = new FileStream(imagePath, FileMode.Open))
35 {
36 using (var img =Image.FromStream(fileStream))
37 {
38 using (var bitmap = new Bitmap(img))
39 {
40 var codecInfo = GetEncoder(img.RawFormat);
41 var myEncoder = Encoder.Quality;
42 var myEncoderParameters = new EncoderParameters(1);
43 var myEncoderParameter = new EncoderParameter(myEncoder, quality);
44 myEncoderParameters.Param[0] = myEncoderParameter;
45 using (var ms = new MemoryStream())
46 {
47 bitmap.Save(ms, codecInfo, myEncoderParameters);
48 myEncoderParameters.Dispose();
49 myEncoderParameter.Dispose();
50 return ms.ToArray();
51 }
52 }
53 }
54 }
55 }
56
57 private static ImageCodecInfo GetEncoder(ImageFormat format)
58 {
59 var codecs = ImageCodecInfo.GetImageDecoders();
60 return codecs.FirstOrDefault(codec => codec.FormatID == format.Guid);
61 }
62 }

调用方法(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#进行图片压缩(对jpg压缩效果最好)的更多相关文章

  1. 图片纯前端JS压缩的实现

    一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅 ...

  2. H5图片预览、压缩、上传

    目标实现: 1.选择图片, 前端预览效果 2.图片大于1.2M的时候, 对图片进行压缩 3.以表单的形式上传图片 4.图片删除 预览效果图: 代码说明: 1.input:file选择图片 <!- ...

  3. 压缩图片工具类,压缩100KB以内拿走直接用

    最近遇到自拍上传图片过大问题,很烦恼,所以自己写了一个压缩图片的工具类使用,自测效果很不错,可以压缩到KB以内,像素还可以分辨清晰 下面Java代码奉上: import lombok.extern.s ...

  4. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式

    进入正题 1. PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template> <div> &l ...

  5. Android微信分享图片大于32k进行压缩

    微信分享视频的时候,需要传一个图片数组,大小不能大于32k. 解决方案:使用Bitmap自带的compress方法解决了这个问题. 源码如下: <span style="font-si ...

  6. php图片水印添加,压缩,剪切的封装类

    php对图片文件的操作主要是利用GD库扩展.当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码.当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有 ...

  7. PHP实现图片上传并压缩

    本文实例讲解了PHP图片上传并压缩的实现方法,分享给大家供大家参考,具体内容如下 使用到三个文件 connect.php:连接数据库 test_upload.php:执行SQL语句 upload_im ...

  8. Android中图片压缩(质量压缩和尺寸压缩)

    关于Android 图片压缩的学习: 自己总结分为质量压缩和像素压缩.质量压缩即:将Bitmap对象保存到对应路径下是所占用的内存减小,但是当你重新读取压缩后的file为Bitmap时,它所占用的内存 ...

  9. H5图片上传、压缩

    1.注册input file标签的onchange事件: 2.检查图片格式: 3.检查图片大小: 4.压缩图片 5.上传图片至服务器: 前端代码: document.getElementById('i ...

  10. 最新javascript自动按比例显示图片,按比例压缩图片显示

    最新javascript自动按比例显示图片,按比例压缩图片显示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...

随机推荐

  1. 记一次线上Redis内存占用过高、大Key问题的排查

    问题背景 在一个风和日丽的下午,公司某项目现场运维同学反馈,生产环境3个Redis的Sentinel集群节点内存占用都很高,达到了17GB的内存占用量. 稍加思索,应该是某些Key的Value数据体量 ...

  2. console小知识

    console.log(JSON.stringify(object,null,2));

  3. 每天上一当系列之vue修饰符.number

    今天使用number修饰符去处理el-input的内容为数字做校验原本以为省事不少,没想到,为0开头无法输入第二位以后,并且输入的比较多的时候会出现Infinity 很神奇,网上查了说是element ...

  4. 4G EPS 中的 PDN Connection

    目录 文章目录 目录 前文列表 PDN PDN Connection APN APN 与 PGW POOL APN 与 vPGW APN 与漫游 PDN Type IP 类型 Non-IP 类型 MM ...

  5. C# winfrom 局域网版多人成语接龙(一)

    在学习 springjdbc+c3p0时做了一个数据库版的获得给定词汇的成语接龙,这个做了之后,我突然就想做一个可供多人游戏的成语接龙游戏,由于自己根本不熟悉java的图形界面开发,感觉没有winfo ...

  6. 开发人员必知的5种开源协议(GPL、LGPL、BSD、MIT、Apache License)

    软件开源是许多软件企业需要关注的问题,不同的开源软件协议,对应不同的源代码使用限制.只有了解这些开源软件协议,才能更好地使用和回馈开源软件,否则就有可能触犯法律.今天介绍四种常见的开源软件协议: GP ...

  7. 7.22考试总结(NOIP模拟23)[联·赛·题]

    不拼尽全力去试一下,又怎么会知道啊 前言 又是被细节问题搞掉的一天. T1 的话,与正解相差无几,少打了两个 else 一个 ls 打成了 rs,然后就爆零了(本来还有 45pts 的),然后加了一个 ...

  8. 11种排序算法(Python实现)

    10种排序算法(Python实现) 冒泡排序 1. 两重循环,每次都将一个点移动到最终位置 def BubbleSort(lst): n=len(lst) if n<=1: return lst ...

  9. Typora编写博客并发布

    (1)工具安装:下载博主xhznl开发的的工具,并按照说明进行正确的配置. EasyBlogImageForTypora使用说明:https://www.cnblogs.com/xhznl/p/132 ...

  10. 基于Vue的二进制时钟组件 -- fx67llBinaryClock

    fx67llClock Easy & Good Clock ! npm 组件说明 一个基于Vue的二进制时钟组件,没什么卵用,做着好玩,可以方便您装饰个人主页 使用步骤 npm install ...