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实现点云数据增强
4309 1
Open3d系列 | 2. Open3d实现点云数据增强
|
消息中间件 存储 数据采集
《数据中台隐性故障的排查逻辑与工程化避坑策略》
本文围绕数据中台建设中的三类隐性故障展开复盘,基于特定数据处理框架、分布式存储系统及混合计算环境,拆解故障排查与解决路径。首先解决用户活跃报表偶现数据缺失问题,通过优化任务调度与数据分区校验避免跨时段数据漏采;其次攻克实时推荐接口高峰期空数据难题,通过匹配计算并行度与缓存优化提升数据处理效率;最后修复离线仓库用户留存率重复统计故障,重构分区合并脚本并建立数据质量巡检机制。文中还提炼“现象锚定-链路拆解-根源验证”排查方法论,为数据中台开发者提供工程化避坑指南。
595 7
|
5月前
|
存储 弹性计算 安全
阿里云ECS服务器CPU使用率100%如何解决?CPU使用率或负载过高解决方法
阿里云ECS服务器CPU使用率过高?本文详解高负载现象(如响应卡顿、页面加载慢)、常见原因(业务进程繁忙、I/O瓶颈、内核异常、恶意程序)及系统化解决方案:通过top定位问题,结合perf/iotop/vmstat深入分析,并提供代码优化、WAF防护、磁盘升级、安全巡检等实操建议。详细参考云服务器ECS官网链接:https://t.aliyun.com/U/AZBUsA
663 2
|
11月前
|
JSON Java 数据格式
SpringBoot使用汇总
本课程系统讲解Spring Boot核心知识,涵盖环境搭建、JSON处理、日志配置、全局异常处理、AOP切面编程及MyBatis、Redis等主流框架集成,并结合实际项目搭建完整开发架构,助你快速掌握微服务开发技能。
|
9月前
|
人工智能 数据可视化 数据挖掘
2026年免费BI产品怎么选?功能强、易上手、安全可靠的推荐
2026年全球BI市场达282.6亿美元,AI驱动分析成主流。本文基于最新数据,聚焦功能、易用性与安全性,重点推荐瓴羊Quick BI——阿里云旗下唯一连续6年入选Gartner魔力象限的国产BI。其永久免费基础版支持多源接入、智能小Q自然语言分析、50+图表及企业级安全,零门槛实现数据可视化。(239字)
|
IDE C# 开发工具
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
批量下载文件时使用多线程可以有效缩短完成时间,本文将讲解如何使用C#+CodePlus扩展库快速完成多线程的文件下载。 大部分代码由IDE自动生成,需要我们自己编写的代码正好**10行**。也就是说,只需要10分钟,就可以手撸一个多线程的批量下载器。
1131 0
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
Sql Server 增加字段、修改字段、修改类型、修改默认值
Sql Server 增加字段、修改字段、修改类型、修改默认值
1718 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 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
786 2