asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式

yizhihongxing

下面我将为你详细讲解asp.net生成高质量缩略图通用函数的攻略。

1. 简介

在很多网站中,我们经常需要使用到缩略图功能。ASP.NET提供了一种方便快捷的方法来生成缩略图。我们可以使用System.DrawingSystem.Drawing.Imaging命名空间中的类来实现。这里,我们将制作一个通用函数,它支持多种生成方式,能够根据需要生成指定大小和质量的缩略图。

2. 实现

首先,我们需要在项目中引用System.DrawingSystem.Drawing.Imaging,并声明它们的命名空间。

using System.Drawing;
using System.Drawing.Imaging;

接下来,我们可以在代码中声明一个缩略图生成函数,用来生成指定大小和质量的缩略图。

public static void GenerateThumbnail(string sourcePath, string destinationPath, int width, int height, long quality)
{
    using (var sourceImage = new Bitmap(sourcePath))
    {
        var sourceWidth = sourceImage.Width;
        var sourceHeight = sourceImage.Height;

        var destWidth = width;
        var destHeight = height;
        var sourceRatio = (double)sourceWidth / sourceHeight;
        var destRatio = (double)destWidth / destHeight;

        if (sourceRatio > destRatio)
        {
            destHeight = (int)(width / sourceRatio);
        }
        else
        {
            destWidth = (int)(height * sourceRatio);
        }

        var destImage = new Bitmap(destWidth, destHeight);

        using (var graphics = Graphics.FromImage(destImage))
        {
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
            graphics.DrawImage(sourceImage, new Rectangle(0, 0, destWidth, destHeight));

            var qualityParamId = Encoder.Quality;
            var encoderParameters = new EncoderParameters(1);
            encoderParameters.Param[0] = new EncoderParameter(qualityParamId, quality);
            var jpgEncoder = GetEncoder(ImageFormat.Jpeg);
            destImage.Save(destinationPath, jpgEncoder, encoderParameters);
        }
    }
}

这个函数的参数比较简单:

  • sourcePath: 原始图片的路径
  • destinationPath: 生成缩略图的路径
  • widthheight: 缩略图的宽度和高度
  • quality: 缩略图的质量,从0到100

在函数内部,我们首先获取原始图像的宽度和高度,并根据源模板的宽高比和目标模板的宽高比计算目标图像的宽度和高度。然后,我们使用System.Drawing命名空间中的类来创建一个新的位图来保存缩略图,然后使用System.Drawing中的Graphics类来绘制缩略图,并将缩略图保存到指定的路径中。

3. 示例

以下是一个完整的示例代码,展示了如何使用上述函数来生成缩略图:

var sourcePath = "source.jpg";
var destinationPath = "destination.jpg";
var width = 200;
var height = 200;
var quality = 80L;
GenerateThumbnail(sourcePath, destinationPath, width, height, quality);

这将生成一个200x200像素的JPEG格式缩略图,并将其保存到destinationPath路径中,质量为80。注意:在实际的生产环境中,请根据需要设置正确的宽度,高度和质量。

下面是另一个生成缩略图的示例,该示例尝试连接到并下载远程图像:

public static void GenerateThumbnailFromUrl(string sourceUrl, string destinationPath, int width, int height, long quality)
{
    using(var webClient = new WebClient())
    {
        using(var sourceStream = webClient.OpenRead(sourceUrl))
        {
            using(var destinationStream = File.Open(destinationPath, FileMode.Create))
            {
                var sourceImage = new Bitmap(sourceStream);
                var sourceWidth = sourceImage.Width;
                var sourceHeight = sourceImage.Height;

                var destWidth = width;
                var destHeight = height;
                var sourceRatio = (double)sourceWidth / sourceHeight;
                var destRatio = (double)destWidth / destHeight;

                if (sourceRatio > destRatio)
                {
                    destHeight = (int)(width / sourceRatio);
                }
                else
                {
                    destWidth = (int)(height * sourceRatio);
                }

                var destImage = new Bitmap(destWidth, destHeight);

                using (var graphics = Graphics.FromImage(destImage))
                {
                    graphics.SmoothingMode = SmoothingMode.HighQuality;
                    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                    graphics.DrawImage(sourceImage, new Rectangle(0, 0, destWidth, destHeight));

                    var qualityParamId = Encoder.Quality;
                    var encoderParameters = new EncoderParameters(1);
                    encoderParameters.Param[0] = new EncoderParameter(qualityParamId, quality);
                    var jpgEncoder = GetEncoder(ImageFormat.Jpeg);
                    destImage.Save(destinationStream, jpgEncoder, encoderParameters);
                }
            }
        }
    }
}

在这个示例中,我们首先使用WebClient类连接到远程URL,然后打开该URL,然后使用创建的输入流读取图像数据。然后,我们通过使用System.Drawing命名空间中的类来生成缩略图,然后将其保存到指定的路径中。

4. 结语

到这里,我们完成了asp.net生成高质量缩略图通用函数的完整攻略。这个函数是使用System.DrawingSystem.Drawing.Imaging命名空间中的类来生成缩略图。我们还展示了如何根据需要生成指定大小和质量的缩略图,并提供了两个示例。希望这篇攻略能够对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • WPF创建Prism应用程序

    WPF 创建 Prism 应用程序的完整攻略 Prism 是一个用于构建 XAML 应用程序的开源框架,它提供了一组工具和库,帮助开发人员构建可扩展、可重用和易于维护的应用程序。本攻略将介绍如何使用 Prism 创建 WPF 应用程序,并提供两个示例说明。 步骤 步骤1:创建 WPF 应用程序 首先,我们需要创建一个 WPF 应用程序。可以使用 Visual…

    C# 2023年5月17日
    00
  • .NET 6开发TodoList应用实现结构搭建

    下面是详细讲解“.NET 6开发TodoList应用实现结构搭建”的完整攻略。 1. 概述 在本教程中,我们将使用.NET 6和C#构建一个简单的ToDoList应用程序。这个应用程序将包括一个基本的用户界面,允许用户创建、修改和删除待办任务。 我们将使用ASP.NET Core MVC框架来构建TodoList应用程序,并将其连接到一个SQLite数据库。…

    C# 2023年6月3日
    00
  • 本人常用的asp代码 原创

    “本人常用的ASP代码原创”攻略 什么是ASP? ASP(Active Server Pages)是微软公司开发的动态网页技术。通过使用ASP,可以在网页中嵌入服务器端脚本代码,并将动态产生的结果发送回客户端浏览器。 如何使用ASP? 要使用ASP,需要一台安装了IIS(Internet Information Services)服务器软件的Windows计…

    C# 2023年5月31日
    00
  • asp.net2.0实现邮件发送(测试成功)

    下面是详细的攻略: 1. 环境准备 在实现邮件发送之前,需要先安装 SmtpClient 类。在 asp.net 2.0 中,这些类已经默认安装在 System.Net.Mail 命名空间中了。因此,我们在编写代码之前,需要确保已经引入了该命名空间。 2. 编写邮件发送代码 在 asp.net2.0 中,发送邮件的代码主要是利用 System.Net.Mai…

    C# 2023年5月31日
    00
  • C#开发教程之ftp操作方法整理

    C#开发教程之ftp操作方法整理 1. 什么是FTP FTP是文件传输协议(File Transfer Protocol)的缩写,是用于在Internet上进行文件传输的一套标准协议。它使用客户端-服务端架构,基于TCP协议,支持不同的文件格式和操作系统。 2. 如何在C#中实现FTP操作 在C#中,可以使用FTP类库和WebClient类库来实现FTP的操…

    C# 2023年5月15日
    00
  • c#和avascript加解密之间的互转代码分享

    下面是详细的“c#和Javascript加解密之间的互转代码分享”的完整攻略。 什么是加解密? 加密是将明文转换成密文的过程,解密是将密文转换成明文的过程。这种加解密的过程是为了保证信息的安全性,防止敏感信息被窃听。 c#和Javascript加解密 在c#和Javascript中,通常使用对称加密算法和非对称加密算法进行加密和解密。 对称加密算法:使用同一…

    C# 2023年6月7日
    00
  • C#中应用程序集的装载过程详解

    下面是C#中应用程序集的装载过程的详细攻略: 1. 什么是应用程序集? 应用程序集是一组由一个应用程序编译成的 .NET 程序集文件,通常是一个 .exe 或 .dll 文件。它包含了应用程序中使用的所有程序集,以及应用程序所需的所有依赖项。在C#中,应用程序集是一种二进制文件,它包含一个可执行程序或动态链接库。 2. 应用程序集的加载过程 在 .NET 中…

    C# 2023年5月15日
    00
  • Entity Framework Core种子数据Data-Seeding

    Entity Framework Core 种子数据(Data Seeding)可以帮助开发者在应用程序中使用预定义的数据填充数据库。本篇文章将从概览、设计、实现等方面详细地介绍 Entity Framework Core 种子数据的完整攻略,包括,如何配置数据模型和 DbContext,如何添加种子数据,以及如何在应用启动时自动应用种子数据等。 1. 概述…

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