C#如何实现图片的剪裁并保存

下面是C#实现图片剪裁并保存的攻略,包含两个示例说明。

1.准备工作

在开始实现图片剪裁之前,需要先引用System.Drawing命名空间,该命名空间是提供处理图片的基本类。

在引用之前需要确保本地已安装.NET Framework SDK,如果未安装可在微软官网下载并安装。

如下所示:

using System.Drawing;

其次,需要了解图片剪裁需要的几个关键概念和类:

  • Image类:代表一个图片,是所有具体图像类型的基类。
  • Graphics类:代表一个绘图图面,提供了基本的绘制和变换方法。
  • Bitmap类:是一个包含像素的图像。可以从指定的文件或资源中创建Bitmap类,也可以通过使用Graphics类绘制。
  • Rectangle类:一个矩形结构,它由四个整数值构成,分别代表矩形的x坐标、y坐标、宽度和高度。

2.实现图片剪裁

以下是实现图片剪切的四个步骤:

  1. 根据指定的路径,创建一个Image对象。
Image sourceImage = Image.FromFile(@"C:\图片.jpg");
  1. 创建一个Bitmap对象并设置它的大小与剪切矩形的大小相同。
Bitmap targetImage = new Bitmap(cropWidth, cropHeight);
  1. 创建一个Graphics对象,并使用Graphics对象的DrawImage方法将想要剪裁的部分绘制在targetImage对象上。
Graphics graphics = Graphics.FromImage(targetImage);
graphics.DrawImage(sourceImage, new Rectangle(0, 0, cropWidth, cropHeight), cropX, cropY, cropWidth, cropHeight, GraphicsUnit.Pixel);

其中参数的意义分别为:

  • new Rectangle(0, 0, cropWidth, cropHeight):图片被剪裁后的矩形范围,这里设置为目标图片的大小。
  • cropX, cropY:指定需要剪切的矩形在源图片中的坐标。
  • cropWidth, cropHeight:指定需要剪切的矩形的宽度和高度。
  • GraphicsUnit.Pixel:指定矩形中的单位为像素。

  • 最后,将targetImage对象保存到本地文件中。

targetImage.Save(@"C:\剪裁后的图片.jpg");

3.示例1:剪裁图片中的人脸

下面是一个剪裁一张人脸图片的示例:

using System.Drawing;
using System.IO;

namespace ImageCropper
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载源图片
            Image sourceImage = Image.FromFile(@"C:\face.jpg");

            //创建一个位图对象
            Bitmap targetImage = new Bitmap(200, 200);

            //创建一个Graphics对象
            Graphics graphics = Graphics.FromImage(targetImage);

            //剪切源图片中的矩形区域,并绘制到targetImage上
            graphics.DrawImage(sourceImage, new Rectangle(0, 0, 200, 200), new Rectangle(200, 200, 200, 200), GraphicsUnit.Pixel);

            //将targetImage保存到本地文件中
            targetImage.Save(@"C:\face_cropped.jpg");

            //释放所有对象,避免内存泄漏
            graphics.Dispose();
            targetImage.Dispose();
            sourceImage.Dispose();
        }
    }
}

上面的代码会将源图片中大小为200x200的矩形区域在新图片中剪裁保存,这个矩形区域是源图片中以(200, 200)为左上角顶点,大小为200x200的矩形。

4.示例2:剪裁多张图片并保存

下面是一个剪裁多张图片的示例:

using System.Drawing;
using System.IO;

namespace ImageCropper
{
    class Program
    {
        static void Main(string[] args)
        {
            //要剪裁的图片列表
            string[] imagePaths = new string[]
            {
                @"C:\flower1.jpg",
                @"C:\flower2.jpg",
                @"C:\flower3.jpg",
                @"C:\flower4.jpg",
            };

            //剪裁后的图片保存目录
            string directoryPath = @"C:\cropped_images\";

            //循环剪裁每个图片
            for (int i = 0; i < imagePaths.Length; i++)
            {
                //加载源图片
                Image sourceImage = Image.FromFile(imagePaths[i]);

                //创建一个位图对象
                Bitmap targetImage = new Bitmap(200, 200);

                //创建一个Graphics对象
                Graphics graphics = Graphics.FromImage(targetImage);

                //剪切源图片中的矩形区域,并绘制到targetImage上
                graphics.DrawImage(sourceImage, new Rectangle(0, 0, 200, 200), new Rectangle(200, 200, 200, 200), GraphicsUnit.Pixel);

                //将targetImage保存到本地文件中
                string fileName = Path.GetFileNameWithoutExtension(imagePaths[i]);
                targetImage.Save(Path.Combine(directoryPath, fileName + "_cropped.jpg"));

                //释放所有对象,避免内存泄漏
                graphics.Dispose();
                targetImage.Dispose();
                sourceImage.Dispose();
            }
        }
    }
}

上面的代码会将4张花卉图片中大小为200x200的矩形区域在新图片中剪裁保存,剪裁后的图片会存储在一个指定的目录中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#如何实现图片的剪裁并保存 - Python技术站

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

相关文章

  • 快速插入大量数据的asp.net代码(Sqlserver)

    下面是一份关于如何快速插入大量数据的asp.net代码(Sqlserver)的攻略: 1. 批量插入数据的原理 快速插入大量数据的原理是通过一次插入多行数据来减少多个单行插入的开销。具体而言,就是使用SQL Server提供的Bulk Copy功能实现批量插入数据。 2. 使用Bulk Copy实现批量插入数据 首先,我们需要先创建一个DataTable对象…

    C# 2023年5月31日
    00
  • C#实现下拉框绑定list集合的方法

    下面是详细讲解“C#实现下拉框绑定list集合的方法”的完整攻略。 1. 准备工作 在实现下拉框绑定list集合之前,需要先准备好以下几个工作: 安装 Visual Studio 开发工具(建议使用最新版本) 创建一个 C# 项目 导入 System.Collections.Generic 命名空间,使用 List 泛型集合 2. 绑定List集合到下拉框 …

    C# 2023年5月31日
    00
  • Razor常用语法介绍及示例

    下面是关于“Razor常用语法介绍及示例”的详细攻略: Razor常用语法介绍及示例 1. Razor简介 Razor是ASP.NET Web Pages框架的视图引擎,它融合了C#和HTML的表现力和灵活性,可以在不破坏HTML结构的前提下,让服务器端代码和客户端代码混合在一起。 Razor语法是以“@”符号开头的指令和表达式组成的,它支持各种C#语法和H…

    C# 2023年5月31日
    00
  • C# 去除首尾字符或字符串的方法

    当处理字符串时,有时需要去掉字符串中的空格或特定字符,这时我们可以使用 C# 中提供的一些方法。下面我将为大家介绍一些去除首尾字符或字符串的方法。 去除空格 使用 Trim() 方法 C# 中的 Trim() 方法可以去除字符串首尾的空格,代码示例如下: string str = " hello world "; string trimS…

    C# 2023年6月8日
    00
  • 基于C#实现一个最简单的HTTP服务器实例

    基于C#实现一个最简单的HTTP服务器实例 介绍 HTTP服务器通常用于向客户端提供Web应用程序或网站的内容。本教程将演示如何使用C#构建一个最简单的HTTP服务器实例。 步骤 第一步:创建一个新的C#控制台应用程序 首先,打开Visual Studio并创建一个新的C#控制台应用程序。 第二步:创建HTTPServer类 我们需要创建一个名为HTTPSe…

    C# 2023年6月7日
    00
  • C# 16进制与字符串、字节数组之间的转换

    下面我将详细讲解C#中16进制与字符串、字节数组之间的转换。 字符串与16进制转换 字符串转16进制 我们可以使用BitConverter和Encoding提供的方法来将字符串转化为16进制。 以下是将字符串转化为16进制的示例代码: string str = "Hello World!"; byte[] bytes = Encoding…

    C# 2023年6月7日
    00
  • 详解VS2017 Linux 上.NET Core调试

    详解VS2017 Linux 上.NET Core调试 在本攻略中,我们将详细介绍如何使用Visual Studio 2017在Linux上调试.NET Core应用程序。我们将介绍如何配置调试环境、如何在Visual Studio中设置调试器,并提供两个示例说明。 配置调试环境 在将.NET Core应用程序调试到Linux上之前,需要进行以下准备工作: …

    C# 2023年5月16日
    00
  • 记一次 .NET 某外贸ERP 内存暴涨分析

    一:背景 1. 讲故事 上周有位朋友找到我,说他的 API 被多次调用后出现了内存暴涨,让我帮忙看下是怎么回事?看样子是有些担心,但也不是特别担心,那既然找到我,就给他分析一下吧。 二:WinDbg 分析 1. 到底是哪里的泄露 这也是我一直在训练营灌输的理念,一定要知道是哪一边的暴涨,否则很可能就南辕北辙了,使用 !address -summary 和 !…

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