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 包。

相关文章
|
前端开发 rax Python
Open3d系列 | 2. Open3d实现点云数据增强
Open3d系列 | 2. Open3d实现点云数据增强
4245 1
Open3d系列 | 2. Open3d实现点云数据增强
|
消息中间件 存储 数据采集
《数据中台隐性故障的排查逻辑与工程化避坑策略》
本文围绕数据中台建设中的三类隐性故障展开复盘,基于特定数据处理框架、分布式存储系统及混合计算环境,拆解故障排查与解决路径。首先解决用户活跃报表偶现数据缺失问题,通过优化任务调度与数据分区校验避免跨时段数据漏采;其次攻克实时推荐接口高峰期空数据难题,通过匹配计算并行度与缓存优化提升数据处理效率;最后修复离线仓库用户留存率重复统计故障,重构分区合并脚本并建立数据质量巡检机制。文中还提炼“现象锚定-链路拆解-根源验证”排查方法论,为数据中台开发者提供工程化避坑指南。
483 7
|
C# Windows
WPF中如何使用HandyCotrol控件库
WPF中如何使用HandyCotrol控件库
2459 1
|
IDE C# 开发工具
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
批量下载文件时使用多线程可以有效缩短完成时间,本文将讲解如何使用C#+CodePlus扩展库快速完成多线程的文件下载。 大部分代码由IDE自动生成,需要我们自己编写的代码正好**10行**。也就是说,只需要10分钟,就可以手撸一个多线程的批量下载器。
1078 0
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
Sql Server 增加字段、修改字段、修改类型、修改默认值
Sql Server 增加字段、修改字段、修改类型、修改默认值
1655 0
|
前端开发 API C#
使用Unity 接入 Stable-Diffusion-WebUI的 文生图api 并生成图像
本文介绍了如何将Unity游戏引擎与Stable-Diffusion-WebUI的文生图API相结合,实现在Unity中生成图像的功能。内容包括启动Stable Diffusion的API设置、在Unity中创建脚本与UI配置,以及通过按钮点击事件触发图像生成的详细步骤和测试过程。
使用Unity 接入 Stable-Diffusion-WebUI的 文生图api 并生成图像
|
存储 JSON API
HTTP 请求与响应处理:C#中的实践
【10月更文挑战第4天】在现代Web开发中,HTTP协议至关重要,无论构建Web应用还是API开发,都需要熟练掌握HTTP请求与响应处理。本文从C#角度出发,介绍HTTP基础知识,包括请求与响应结构,并通过`HttpClient`库演示如何发送GET请求及处理响应,同时分析常见错误并提供解决方案,助你更高效地完成HTTP相关任务。
755 2
|
数据采集 存储 算法
ScrapySharp框架:小红书视频数据采集的API集成与应用
ScrapySharp框架:小红书视频数据采集的API集成与应用
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
881 0
|
调度
cron表达式
cron表达式
596 2

热门文章

最新文章