C#图片截取压缩(百分比压缩/大小压缩)实现代码

yizhihongxing

下面我将为您详细讲解“C#图片截取压缩(百分比压缩/大小压缩)实现代码”的完整攻略。

一、实现思路

图片截取和压缩功能可以通过C#中内置的System.Drawing命名空间的方法来实现。具体实现流程如下:

  1. 读取原始图片文件,创建一个Image对象;
  2. 将Image对象转换为Bitmap对象;
  3. 调用Bitmap对象的Crop方法对图片进行截取,得到截取后的Bitmap对象;
  4. 调用Bitmap对象的GetThumbnailImage方法将图片压缩为指定大小;
  5. 保存压缩后的Bitmap对象,得到最终的图片。

二、代码示例1:百分比压缩

using System.Drawing;

// 图片压缩比例
decimal percent = 0.5m;

// 原始图片文件路径
string inputFilePath = "D:/test/original.jpg";

// 压缩后的图片保存路径
string outputFilePath = "D:/test/output.jpg";

// 读取原始图片文件
Image originalImage = Image.FromFile(inputFilePath);

// 将Image对象转换为Bitmap对象
Bitmap originalBitmap = new Bitmap(originalImage);

// 获取原始图片的大小
int originalWidth = originalBitmap.Width;
int originalHeight = originalBitmap.Height;

// 计算压缩后的图片大小
int newWidth = (int)(originalWidth * percent);
int newHeight = (int)(originalHeight * percent);

// 调用Bitmap对象的Crop方法对图片进行截取
Bitmap croppedBitmap = originalBitmap.Clone(new Rectangle(0, 0, newWidth, newHeight), originalBitmap.PixelFormat);

// 调用Bitmap对象的GetThumbnailImage方法将图片压缩为指定大小
Image compressedImage = croppedBitmap.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);

// 保存压缩后的图片
compressedImage.Save(outputFilePath);

// 释放资源
originalImage.Dispose();
originalBitmap.Dispose();
croppedBitmap.Dispose();
compressedImage.Dispose();

三、代码示例2:大小压缩

using System.Drawing;

// 压缩后的图片宽度
int newWidth = 500;

// 压缩后的图片高度
int newHeight = 500;

// 原始图片文件路径
string inputFilePath = "D:/test/original.jpg";

// 压缩后的图片保存路径
string outputFilePath = "D:/test/output.jpg";

// 读取原始图片文件
Image originalImage = Image.FromFile(inputFilePath);

// 将Image对象转换为Bitmap对象
Bitmap originalBitmap = new Bitmap(originalImage);

// 调用Bitmap对象的GetThumbnailImage方法将图片压缩为指定大小
Image compressedImage = originalBitmap.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);

// 保存压缩后的图片
compressedImage.Save(outputFilePath);

// 释放资源
originalImage.Dispose();
originalBitmap.Dispose();
compressedImage.Dispose();

希望以上代码示例对你有所帮助。如果有任何问题,欢迎留言讨论。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#图片截取压缩(百分比压缩/大小压缩)实现代码 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • asp.net 因为数据库正在使用的解决方法

    当asp.net应用程序想要访问正在被其他进程或系统使用的数据库时,会出现数据库锁死、操作失败等错误。本文将详细讲解如何解决此类问题的完整攻略。 场景分析 在开始解决问题之前,我们需要先明确应用程序与数据库之间的关系。一般情况下,asp.net应用程序可以通过ADO.NET或ORM等技术,从数据库中读取或写入数据。但是,如果数据库正在被其他进程或系统使用,此…

    C# 2023年5月31日
    00
  • c# 日历控件的实现

    C#日历控件的实现 在C#中,开发者可以使用日历控件来方便地选择日期。下面分享一下如何在C#中实现日历控件。 步骤一:引用命名空间 首先,在你的C#程序中引用 System.Windows.Forms 命名空间。 using System.Windows.Forms; 步骤二:创建日历控件 在你的C#程序中,实例化一个 MonthCalendar 控件。 M…

    C# 2023年6月1日
    00
  • Windows下C#的GUI窗口程序中实现调用Google Map的实例

    在Windows下使用C#开发GUI窗口程序的过程中,如果需要调用Google Map的API来实现一些地图相关的功能,可以按照以下步骤进行操作: 获取Google Map API 首先需要获取Google Map的API,可以通过访问Google Cloud Platform(https://console.cloud.google.com/apis)来获…

    C# 2023年6月7日
    00
  • C#实现的序列化通用类实例

    C#实现的序列化通用类实例 介绍 在C#中,序列化是将对象转换为流的过程,以便将其存储在磁盘或通过网络传输。反序列化则是将对象流转换回对象的过程。序列化通用类是一个可以将对象序列化为数据流或从数据流中反序列化的类,它可用于序列化不同类型的对象。 实现过程 创建配置文件(可选) 在整个应用程序中,配置文件非常重要,它包含着我们程序的基本配置信息。序列化通用类也…

    C# 2023年6月6日
    00
  • c# Newtonsoft 六个值得使用的特性(下)

    c#Newtonsoft六个值得使用的特性(下) 本文将介绍c#中使用Newtonsoft.Json的六个值得使用的特性,并提供示例来帮助您更好地理解这些特性。 1. JsonConverter JsonConverter 允许我们创建一个自定义的序列化器(serializer)来处理我们的 JSON 对象。我们可以在实现JsonConverter类时覆盖带…

    C# 2023年5月14日
    00
  • ASP.NET 前后台调用方法

    ASP.NET 是一种用于 Web 应用程序开发的框架,可以帮助开发人员构建强大的 Web 应用程序。其中,前后台调用方法是实现 ASP.NET 开发过程中的一个重要技术点,下面我将提供详细的攻略。 首先,我们需要了解 ASP.NET 前后台调用方法的实现原理。在 ASP.NET 中,前后台调用方法主要是通过 Ajax (异步 JavaScript 和 XM…

    C# 2023年6月3日
    00
  • C#表达式树Expression动态创建表达式

    本文将会介绍C#表达式树(Expression)动态创建表达式的完整攻略,包括表达式树的基本概念、表达式树的创建、表达式树的编译以及完整的示例说明。 表达式树的基本概念 表达式树是一个由操作符和操作数组成的树状结构,是一种可以在运行时动态创建表达式的机制。在C#中,表达式树是由Expression命名空间中的类和枚举所组成,它们提供了创建和操作表达式树的方法…

    C# 2023年5月31日
    00
  • 详解ASP.NET Core 2.0 路由引擎之网址生成(译)

    详解ASP.NET Core 2.0 路由引擎之网址生成攻略 在本攻略中,我们将详细讲解ASP.NET Core 2.0路由引擎之网址生成,并提供两个示例说明。 步骤一:创建路由 在ASP.NET Core 2.0应用程序中,您需要创建一个路由。以下是一个示例: app.UseMvc(routes => { routes.MapRoute( name:…

    C# 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部