C# 实现图片压缩工具(基础版)

简介: 基于 System.Drawing 实现图片尺寸缩放与质量压缩,支持常见格式。通过计算缩放比例生成新图像,并调整压缩质量以减小文件大小。适用于 .NET 平台,需安装 System.Drawing.Common NuGet 包。

基于 System.Drawing 实现图片尺寸缩放和质量压缩,支持常见格式。

using System.Drawing;
using System.Drawing.Imaging;
public class ImageCompressor
{
    // 压缩图片(按尺寸缩放+质量调整)
    public static bool CompressImage(string sourcePath, string outputPath, int maxWidth, int maxHeight, long quality = 70)
    {
        try
        {
            using (Image originalImage = Image.FromFile(sourcePath))
            {
                // 计算缩放比例
                float scale = Math.Min((float)maxWidth / originalImage.Width, (float)maxHeight / originalImage.Height);
                int newWidth = (int)(originalImage.Width * scale);
                int newHeight = (int)(originalImage.Height * scale);
                // 创建新位图
                using (Bitmap newBitmap = new Bitmap(newWidth, newHeight))
                using (Graphics g = Graphics.FromImage(newBitmap))
                {
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    g.DrawImage(originalImage, 0, 0, newWidth, newHeight);
                    // 设置压缩质量
                    EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality);
                    ImageCodecInfo jpegCodec = ImageCodecInfo.GetImageDecoders()
                        .First(c => c.FormatID == ImageFormat.Jpeg.Guid);
                    EncoderParameters encoderParams = new EncoderParameters(1);
                    encoderParams.Param[0] = qualityParam;
                    // 保存压缩后的图片
                    newBitmap.Save(outputPath, jpegCodec, encoderParams);
                }
            }
            Console.WriteLine("图片压缩成功!");
            return true;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"压缩失败: {ex.Message}");
            return false;
        }
    }
    // 调用示例
    public static void TestCompress()
    {
        CompressImage("source.jpg", "output_compressed.jpg", 800, 600, 60);
    }
}

注意:.NET Core/.NET 5+ 需安装 System.Drawing.Common NuGet 包。

相关文章
Datatables获取选中行的某一列的数据
Datatables获取选中行的某一列的数据
740 1
|
关系型数据库 MySQL 索引
mysql查询中内连接和左连接有什么区别
mysql查询中内连接和左连接有什么区别
352 0
Image.FromFile导入图片引发的“内存不足”问题
  C# 的Image.FromFile导入一些大小为0的假图片文件引发的“内存不足”问题。   1、案例问题现场 (1)、大小为0的假图片文件     (2)、引发血案   2、解决方法 这里用的方法是导入时先对图片的大小进行判断,注意获取图片大小的方法。
1863 0
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
1235 2
|
消息中间件 开发框架 监控
NET任务调度框架Hangfire使用指南
Hangfire 是一个用于 .NET 应用程序的开源任务调度框架,支持长时间运行任务、定时任务等。通过简单的安装配置,即可将任务从主线程分离,提升应用性能。支持多种数据库,提供丰富的任务类型如立即执行、延迟执行和周期性任务,并有可视化管理界面 Hangfire Dashboard。还支持安全性配置及扩展插件,如 Hangfire.HttpJob,适合各种复杂场景下的任务调度需求。
1411 1
NET任务调度框架Hangfire使用指南
|
关系型数据库 C# 数据库
.NET 8.0 开源在线考试系统(支持移动端)
【10月更文挑战第27天】以下是适用于 .NET 8.0 的开源在线考试系统(支持移动端)的简介: 1. **基于 .NET Core**:跨平台,支持多种数据库,前后端分离,适用于多操作系统。 2. **结合 Blazor**:使用 C# 开发 Web 应用,支持响应式设计,优化移动端体验。 3. **基于 .NET MAUI**:跨平台移动应用开发,一套代码多平台运行,提高开发效率。 开发时需关注界面设计、安全性与稳定性。
404 4
|
开发框架 前端开发 JavaScript
利用Spire.Pdf实现PDF添加印章的操作
利用Spire.Pdf实现PDF添加印章的操作
|
开发框架 前端开发 JavaScript
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
|
JavaScript
ant design vue 的table组件使用
介绍了antd vue 表格rowSelection选择框功能的使用方式,具有很好的参考价值
680 2