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日

相关文章

  • C#中using关键字的使用方法示例

    下面我将为您详细讲解“C#中using关键字的使用方法示例”的完整攻略。 1. using关键字的基本语法 在C#中,using关键字通常用于释放对象的资源,以确保程序的高效性和安全性。它的基本语法如下: using (resource) { // 对象资源的使用代码块 } 其中,resource表示需要释放的对象资源。对象资源通常是一些需要手动释放的资源对…

    C# 2023年5月31日
    00
  • 提高C# StringBuilder操作性能优化的方法

    提高C# StringBuilder操作性能优化的方法 前言 StringBuilder是C#语言中常用的字符串操作类之一,用于对字符串进行动态操作,比如追加、替换、插入等。在进行大量字符串操作时,使用StringBuilder可以提高性能,而不必像使用字符串拼接时那样频繁创建和销毁字符串对象。但是,如果使用不得当,StringBuilder也可能出现性能问…

    C# 2023年6月8日
    00
  • c#中的扩展方法学习笔记

    下面我将详细讲解C#中的扩展方法学习笔记的完整攻略: 扩展方法简介 扩展方法是一种特殊的静态方法,它可以在不改变原有类的基础上,给该类添加新的方法。扩展方法的定义必须在一个静态类中,并且这个静态类必须是非泛型类,这个类的方法必须是静态且必须使用 this 关键字作为第一个参数。扩展方法的使用方式和实例方法一样,但注意一定要引用命名空间。 扩展方法的定义 扩展…

    C# 2023年6月7日
    00
  • ASP.NET CORE WEBAPI 登录 JWT 鉴权 ,接口权限验证

    JWT的简单使用 介绍 当今Web开发中,API的使用越来越广泛,而API的安全性也变得越来越重要。其中,JWT(JSON Web Token)鉴权和授权是一种常见的解决方案。 本篇文章将会介绍JWT鉴权和授权的原理、实现方式以及注意事项。 什么是JWT? JWT是一种基于JSON格式的开放标准(RFC7519),用于在网络上传递声明信息的一种简洁、自包含的…

    C# 2023年4月22日
    00
  • C#如何绑定多个按钮到同一个事件

    首先,在C#中,我们可以定义一个事件的处理函数,然后将多个按钮的Click事件都绑定到该处理函数。这样,在任意一个按钮被点击时,都会执行该处理函数。 下面是绑定多个按钮到同一个事件的完整攻略: 1. 定义事件处理函数 首先,在C#中定义一个事件处理函数,如下所示: private void btn_Click(object sender, EventArgs…

    C# 2023年6月6日
    00
  • ASP.NET MVC结合JavaScript登录、校验和加密

    ASP.NET MVC结合JavaScript登录、校验和加密是一个比较常见的需求,可以通过以下步骤实现: 步骤一:创建ASP.NET MVC项目 在Visual Studio中创建ASP.NET MVC项目,选择“Empty”模板即可。 步骤二:添加登录页面 在Views文件夹下创建登录页面,命名为Login.cshtml。该页面包含用户名和密码的输入框,…

    C# 2023年5月31日
    00
  • C#中的虚方法和抽象方法的运用

    C#中的虚方法和抽象方法是面向对象编程中的重要概念,它们可以帮助程序员实现多态性和继承关系。下面我来详细讲解一下它们的运用。 虚方法 基本概念 虚方法是指在基类中声明的方法,子类可以选择性地重写(override)它,在运行时具有多态效果。虚方法使用 virtual 关键字来修饰。 示例说明 我们可以使用一个简单的图形类作为示例,来演示虚方法的应用。我们先定…

    C# 2023年6月7日
    00
  • Entity Framework系统架构与原理介绍

    Entity Framework是一个开源的ORM框架,它可以帮助开发人员通过面向对象的方式来操作数据库。本文将详细介绍Entity Framework的系统架构和原理,并提供两个示例来演示如何使用Entity Framework。 Entity Framework系统架构 Entity Framework的系统架构主要由以下三个部分组成: 模型层 模型层是…

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