C#进行图片压缩(对jpg压缩效果最好)
直接上代码
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压缩效果最好)的更多相关文章
- 图片纯前端JS压缩的实现
一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅 ...
- H5图片预览、压缩、上传
目标实现: 1.选择图片, 前端预览效果 2.图片大于1.2M的时候, 对图片进行压缩 3.以表单的形式上传图片 4.图片删除 预览效果图: 代码说明: 1.input:file选择图片 <!- ...
- 压缩图片工具类,压缩100KB以内拿走直接用
最近遇到自拍上传图片过大问题,很烦恼,所以自己写了一个压缩图片的工具类使用,自测效果很不错,可以压缩到KB以内,像素还可以分辨清晰 下面Java代码奉上: import lombok.extern.s ...
- vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式
进入正题 1. PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template> <div> &l ...
- Android微信分享图片大于32k进行压缩
微信分享视频的时候,需要传一个图片数组,大小不能大于32k. 解决方案:使用Bitmap自带的compress方法解决了这个问题. 源码如下: <span style="font-si ...
- php图片水印添加,压缩,剪切的封装类
php对图片文件的操作主要是利用GD库扩展.当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码.当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有 ...
- PHP实现图片上传并压缩
本文实例讲解了PHP图片上传并压缩的实现方法,分享给大家供大家参考,具体内容如下 使用到三个文件 connect.php:连接数据库 test_upload.php:执行SQL语句 upload_im ...
- Android中图片压缩(质量压缩和尺寸压缩)
关于Android 图片压缩的学习: 自己总结分为质量压缩和像素压缩.质量压缩即:将Bitmap对象保存到对应路径下是所占用的内存减小,但是当你重新读取压缩后的file为Bitmap时,它所占用的内存 ...
- H5图片上传、压缩
1.注册input file标签的onchange事件: 2.检查图片格式: 3.检查图片大小: 4.压缩图片 5.上传图片至服务器: 前端代码: document.getElementById('i ...
- 最新javascript自动按比例显示图片,按比例压缩图片显示
最新javascript自动按比例显示图片,按比例压缩图片显示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
随机推荐
- kube-proxy 流量流转方式
简介 kube-proxy 是 Kubernetes 集群中负责服务发现和负载均衡的组件之一.它是一个网络代理,运行在每个节点上, 用于 service 资源的负载均衡.它有两种模式:iptables ...
- ip地址、子网掩码、网关、dns简介
IP地址IPADDR: IP地址是唯一的标识,是一段网络编码(二进制),由32位组成. IP 是 Internet Protocol(网际互连协议)的缩写,是 TCP/IP 体系中的网络层协议. IP ...
- d3d12龙书阅读----绘制几何体(下)
d3d12龙书阅读----绘制几何体(下) 本节在上一节的基础上,对整个绘制过程进行优化,将绘制单个几何体的内容拓展到了多个几何体,同时对根签名进行了进一步地探索. 帧资源 在之前绘制每帧的结尾,我们 ...
- Django国际化与本地化指南
title: Django国际化与本地化指南 date: 2024/5/12 16:51:04 updated: 2024/5/12 16:51:04 categories: 后端开发 tags: D ...
- pageoffice6 实现提取数据区域为子文件(Word拆分)
在实际的开发过程中,有时会遇到希望提取Word文档中部分内容保存为子文件的需求,PageOffice支持提取Word文档数据区域中的内容为一个Word文件流,在服务器端创建PageOffice的Wor ...
- turltle模块详解
引言:turtle(海龟)模块,我们是用它来进行画图的,基本上就是画简单的直线,点,和曲线. 你可以把它想成一个小海龟,在沙滩上行走,然后留下的各种痕迹,使用Turtle模块可以绘制很多精美的图形. ...
- iOS技术管理思路
iOS技术管理思路
- 微信小程序学习随笔
scroll-view与view 要做出滚动视图的效果 <scroll-view> <view id="1">11</view> <vie ...
- 采用Dapr 的IoT 案例
CNCF 发布了一篇Dapr 的IoT 案例:Tempestive uses Dapr and K8s to track IoT messages | CNCF.Tempestive 是一家物联网解决 ...
- webpack处理静态资源
像项目中字体资源是不需要进行打包处理的,可以直接的通过复制方式给打包到目标目录中 # 安装 npm i -D copy-webpack-plugin # 引入 const CopyPlugin = r ...