C# 进行图片压缩的示例代码(对jpg压缩效果最好)
作者:踏平扶桑 发布时间:2023-05-11 16:34:19
标签:c#,图片,压缩
直接上代码
public static class ImageCompress
{
/// <summary>
/// 图片压缩
/// </summary>
/// <param name="imagePath">图片文件路径</param>
/// <param name="targetFolder">保存文件夹</param>
/// <param name="quality">压缩质量</param>
/// <param name="fileSuffix">压缩后的文件名后缀(防止直接覆盖原文件)</param>
public static void CompressionImage(string imagePath, string targetFolder, long quality = 100, string fileSuffix = "compress")
{
if (!File.Exists(imagePath))
{
throw new FileNotFoundException();
}
if (!Directory.Exists(targetFolder))
{
Directory.CreateDirectory(targetFolder);
}
var fileInfo = new FileInfo(imagePath);
var fileName = fileInfo.Name.Replace(fileInfo.Extension, "");
var fileFullName = Path.Combine($"{targetFolder}", $"{fileName}_{fileSuffix}{fileInfo.Extension}");
var imageByte = CompressionImage(imagePath, quality);
var ms = new MemoryStream(imageByte);
var image = Image.FromStream(ms);
image.Save(fileFullName);
ms.Close();
ms.Dispose();
image.Dispose();
}
private static byte[] CompressionImage(string imagePath, long quality)
{
using (var fileStream = new FileStream(imagePath, FileMode.Open))
{
using (var img =Image.FromStream(fileStream))
{
using (var bitmap = new Bitmap(img))
{
var codecInfo = GetEncoder(img.RawFormat);
var myEncoder = Encoder.Quality;
var myEncoderParameters = new EncoderParameters(1);
var myEncoderParameter = new EncoderParameter(myEncoder, quality);
myEncoderParameters.Param[0] = myEncoderParameter;
using (var ms = new MemoryStream())
{
bitmap.Save(ms, codecInfo, myEncoderParameters);
myEncoderParameters.Dispose();
myEncoderParameter.Dispose();
return ms.ToArray();
}
}
}
}
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
var codecs = ImageCodecInfo.GetImageDecoders();
return codecs.FirstOrDefault(codec => codec.FormatID == format.Guid);
}
}
调用方法(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);
}
来源:https://www.cnblogs.com/wdw984/p/13112621.html
0
投稿
猜你喜欢
- 上一篇讲完注解,这篇咱们科普一 * 解的其中一种用途——注解处理器(APT),文章会手把手的帮助大家学
- package com.jjinfo.common.util; import java.util.Arrays; import java.u
- 如下所示:using System.Linq;List<string> ListA = new List<string&g
- 一、前言问题阐述:在某一场景下,我们的代码在 Service 实现相同,但却在 Controller 层访问时却希望不同的前缀可以访问。如下
- 引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在
- C# 复制与删除文件的实现方法1、首先是复制文件首先打开我们的对话框获得文件路径,当然也可以直接编写路径private void BtnAd
- @GetMapping注解携带参数方式今天突然发现,当我们根据id查询用户信息时,如果不想通过localhost:8080//findOne
- 本文实例讲述了C#预处理器指令的用法。分享给大家供大家参考。具体用法分析如下:C#预处理器指令是在编译时调用的。预处理器指令(preproc
- 前言公司最近在开发中遇到一个问题,在弄帖子的发布与回复问题,然后再iOS端和Android端添加表情的时候都会出错Caused by: ja
- 首先给大家展示下运行效果图:由于通讯录在手机里是以数据库贮存的 所以我们可以通过一个方法context.getContentResolver
- 本文实例讲述了C#简单读取、改变文件的创建、修改及访问时间的方法。分享给大家供大家参考。具体如下:FileInfo fi = new Fil
- 这篇文章主要介绍了基于spring security实现登录注销功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- FPS是什么?FPS (每秒传输帧数(Frames Per Second))【摘自百度百科】FPS是图像领域中的定义,是指画面每秒传输帧数,
- 编写一个 Java 应用程序,实现图形界面多人聊天室(多线程实现),要求聊天室窗口标题是 “欢迎使用 XXX 聊天室应用
- 1. 原因最近学习spring data JPA 时候要用到分页功能,但是发现网上所有教程都是通过new PageRequest()方法解决
- 前言:事情是这样的:运营人员反馈,通过Excel导入数据时,有一部分成功了,有一部分未导入。初步猜测,是事务未生效导致的。查看代码,发现导入
- 中断线程线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等
- 一、返回值格式统一1.返回值介绍在使用controller对外提供服务的时候,很多时候都需要统一返回值格式,例如{"status&
- 一、如何显示assets/license.txt(中文)的内容? (1)方法1:InputStream.available()得到字节数,然
- Android RecyclerView 是Android5.0推出来的,导入support-v7包即可使用。个人体验来说,Recycler