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

yizhihongxing

下面是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日

相关文章

  • 使用MSScriptControl 在 C# 中读取json数据的方法

    使用MSScriptControl 在 C# 中读取json数据的方法,可以分为以下几个步骤: 1. 引入MSScriptControl组件 首先,需要在C#项目中引入MSScriptControl组件,方法如下: 在项目中右键点击“引用” 在弹出的“引用管理器”窗口中,点击“程序集”选项卡,然后点击“浏览”按钮 在弹出的文件选择窗口中,找到并选中MSScr…

    C# 2023年6月1日
    00
  • 关于C#操作文件路径(Directory)的常用静态方法详解

    关于C#操作文件路径(Directory)的常用静态方法详解 Directory类的简介 在C#中,Directory类提供了用于操作文件夹和文件路径的静态方法。它通过一系列的静态方法,可以实现对于文件夹以及文件路径的各种操作。常用的静态方法有以下几种: Directory.Exists(string path):判断某个路径是否存在 Directory.C…

    C# 2023年5月15日
    00
  • Unity通过脚本创建网格Mesh的方法

    当我们需要在Unity中动态创建网格(mesh)的时候,通常都是通过代码来实现。如何在脚本中创建网格呢?接下来,我将为大家详细介绍Unity通过脚本创建网格Mesh的方法,希望能帮到大家。 1. 基础网格Mesh的创建 以下是创建基础网格Mesh的步骤: 创建空GameObject作为网格物体的容器。 创建一个MeshFilter组件并将其附加到新GameO…

    C# 2023年6月3日
    00
  • 深入解析C#编程中struct所定义的结构

    深入解析C#编程中struct所定义的结构 什么是struct? struct是C#语言中用来定义结构体的关键字,它像类一样可以定义成员变量和方法,但是,它有以下特点: struct是值类型,而类则是引用类型 在定义struct时,成员变量不会进行初始化,必须在创建实例时自行初始化 struct的实例通常存储在栈中,而类的实例存储在堆中 使用struct可以…

    C# 2023年6月7日
    00
  • C#实现打造气泡屏幕保护效果

    C#实现打造气泡屏幕保护效果 屏幕保护程序是许多电脑用户在闲暇时间会看到的一个漂亮而且有趣的应用。在这篇攻略中,我们将探讨如何使用C#编写一个简单的气泡屏保程序。本示例基于.NET Framework 4.7.1。 步骤1. 创建项目 首先,打开Visual Studio,从“文件”菜单中选择“新建项目”。在弹出的窗口中,选择“Visual C#”和“Win…

    C# 2023年5月31日
    00
  • ASP.net Core微信平台开发配置Token

    ASP.NET Core微信平台开发配置Token攻略 微信平台开发是一个非常流行的应用场景,许多企业和个人都在使用微信平台来开发自己的应用程序。在ASP.NET Core中,我们可以使用微信平台提供的API来实现微信平台开发。本攻略将介绍如何在ASP.NET Core中配置Token,以便我们可以使用微信平台API。 配置Token 在微信平台开发中,我们…

    C# 2023年5月17日
    00
  • ASP .NET中执行控件(如ImageButton、LinkButton等)命令不刷新页面

    ASP .NET中执行控件命令(如ImageButton、LinkButton等)不刷新页面的方案主要有两种: 使用UpdatePanel控件 UpdatePanel控件是ASP .NET中的异步刷新控件,它可以实现部分页面的异步刷新,从而使得页面局部刷新,不需要整个页面重新加载。在这种方式下,执行控件命令不会刷新整个页面,而是只会刷新UpdatePanel…

    C# 2023年6月3日
    00
  • JQuery异步加载PartialView的方法

    当需要在页面中通过Ajax加载局部视图(Partial Views)时,可以使用jQuery的ajax()方法和MVC的部分视图(Partial Views)来轻松实现。 下面是JQuery异步加载PartialView的方法的完整攻略: 1、在MVC控制器中创建Partial View 首先,在MVC控制器中创建Partial View方法,具体代码如下:…

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