直接上代码

 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. typescript基础知识汇总

    JavaScript中所有事物(字符串.数值.数组.函数)都是对象,都有属性和方法.1.用函数定义对象,然后new对象实例.2.用Object定义并创建对象实例var o = new Object(t ...

  2. 让AnaTraf成为您网络流量分析的最佳利器

    在快速发展的数字时代,企业对网络性能的监测与分析需求愈加旺盛.作为网络性能监测与诊断(NPMD)领域的佼佼者,AnaTraf网络流量分析仪凭借其出色的性能和易用性,正成为网络管理人员的首选工具. An ...

  3. sass 混合指令 (Mixin Directives)详解

    ​ 混合指令(Mixin)用于定义可重复使用的样式,避免了使用无语意的 class,比如 .float-left.混合指令可以包含所有的 CSS 规则,绝大部分 Sass 规则,甚至通过参数功能引入变 ...

  4. Python爬图片(面向对象版)

    import requests from lxml import etree from threading import Thread class Spider(object): def __init ...

  5. .net core 下 DES &MD5加密

    項目中經常會用到加密解密,分享 DES & MD5加密,當然我們建議使用MD5. #region DES encrypt, decrypt public string EncryptDES(s ...

  6. Vue 页面传参方式 Query 和 Params

    1. query 与 params 传参 query 需要和配合 path 属性使用,携带参数会拼接在请求路径后,效果同 Get 请求方式 http://localhost:8033/Permissi ...

  7. http1.1 的默认长连接 Connection: keep-alive 与 TCP KeepAlive 之间区别

    HTTP 长连接,也称为 HTTP 持久连接(HTTP Persistent Connection)或 HTTP 连接重用,是一种在 HTTP 协议中实现的机制. 在传统的 HTTP 通信中,每个 H ...

  8. react css-in-js

    CSS-in-JS是一种技术,而不是一个具体的库实现.简单来说CSS-in-JS就是将应用的CSS样式写在JavaScript文件里面,而不是独立为一些css,scss或less之类的文件,这样你就可 ...

  9. Keil一键添加.c文件和头文件路径脚本--可遍历添加整个文件夹

    最近想移植个LVGL玩玩,发现文件实在是太多了,加的手疼都没搞完,实在不想搞了就去找脚本和工具,基本没找到一个...... 主要是自己也懒得去研究写脚本,偶然搜到了一个博主写的脚本,原博客地址:htt ...

  10. R-tree算法

    R-tree是一种用于处理空间数据的自平衡搜索树结构,特别适合于存储和查询二维或更高维度的空间对象,如点.线段.矩形等.它在地理信息系统.计算机图形学.数据库等领域有广泛应用.R树通过将空间分割成几个 ...