ASP.NET中高质量缩略图的生成代码

yizhihongxing

生成高质量缩略图是很多网站开发者需要解决的问题之一。在 ASP.NET 中高质量缩略图可以通过使用 System.Drawing 命名空间实现。下面是一份完整的 ASP.NET 中生成高质量缩略图攻略,包括代码示例。

步骤1:添加 System.Drawing 引用

生成高质量缩略图需要使用 System.Drawing 命名空间中的方法和类。需要在项目中添加 System.Drawing 引用,可以在项目中的 NuGet 包管理器中搜索 "System.Drawing" 并安装。

步骤2:编写生成缩略图的代码

为了生成高质量且图片比例不失真的缩略图,需要在 System.Drawing 命名空间中使用 Image、Graphics 和 Bitmap 类方法。

以下是一段生成指定大小缩略图的完整代码。假设已经将原始图片放在了名为 "source.jpg" 的文件中:

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

public static void GenerateThumbnailImage(string originalImagePath, string thumbnailImagePath, int thumbnailSize)
{
    using(Image originalImage = Image.FromFile(originalImagePath))
    {
        int width, height;

        // 计算缩略图尺寸
        if (originalImage.Width > originalImage.Height)
        {
            width = thumbnailSize;
            height = originalImage.Height * thumbnailSize/originalImage.Width;
        }
        else 
        {
            width = originalImage.Width * thumbnailSize/originalImage.Height;
            height = thumbnailSize;
        }

        // 新建一个图像对象
        using(Bitmap thumbnailBitmap = new Bitmap(width, height))
        {
            using(Graphics thumbnailGraph = Graphics.FromImage(thumbnailBitmap))
            {
                thumbnailGraph.CompositingQuality = CompositingQuality.HighQuality;
                thumbnailGraph.SmoothingMode = SmoothingMode.HighQuality;
                thumbnailGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;

                //调整画布,并设置合适的清晰度和比例
                var imageRectangle = new Rectangle(0, 0, width, height);
                thumbnailGraph.DrawImage(originalImage, imageRectangle);

                //保存缩略图到指定路径
                thumbnailBitmap.Save(thumbnailImagePath, ImageFormat.Jpeg);
            }
        }
    }
}

代码注释已经很详细,大致意思是计算缩略图的大小、新建一个缩略图 Bitmap对象、调整画布大小比例、绘制缩略图、保存到指定路径。

步骤3:在ASP.NET网站使用生成缩略图的代码

假设我们需要在 ASP.NET 的上传图片功能中,在用户上传原图完成后,生成指定大小的缩略图并保存在指定的缩略图文件夹中,以下是一段嵌入代码的示例。

<%@ Page Language="C#" %>

<!DOCTYPE html>

<script runat="server">

    protected void UploadButton_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            //以下代码保存上传的原图片到文件夹中
            string originalPath = Server.MapPath("/Upload/original/");
            string originalFilename = Path.GetFileName(FileUpload1.FileName);
            string originalFilePath = Path.Combine(originalPath, originalFilename);
            FileUpload1.SaveAs(originalFilePath);

            //以下代码生成指定大小的缩略图,并保存到指定的缩略图文件夹中
            string thumbnailPath = Server.MapPath("/Upload/thumbnail/");
            string thumbnailFilename = Path.GetFileNameWithoutExtension(FileUpload1.FileName) + ".jpg";
            string thumbnailFilePath = Path.Combine(thumbnailPath, thumbnailFilename);
            GenerateThumbnailImage(originalFilePath, thumbnailFilePath, 100);

            // upload success notification
            successNotification.Visible = true;
        }
        else
        { 
            //upload fail notification
            failNotification.Visible = true;
        }
    }

</script>

<html>
<head>
    <title>Upload Example</title>
</head>
<body>
    <div>
        <h1>Upload Example</h1>
        <asp:Label ID="failNotification" runat="server" Text="Upload failed!" Visible="false"></asp:Label>
        <asp:Label ID="successNotification" runat="server" Text="Upload successful!" Visible="false"></asp:Label>

        <form id="UploadForm" runat="server" enctype="multipart/form-data">
            <label>Upload a file:</label>
            <asp:FileUpload ID="FileUpload1" runat="server" />
            <br />
            <asp:Button ID="UploadButton" runat="server" OnClick="UploadButton_Click" Text="Upload" />
        </form>
    </div>
</body>
</html>

以上示例中,我们首先保存上传的原图到指定的文件夹中,然后再生成指定尺寸、保存到指定路径的缩略图,最后展示上传结果。

结论

在 ASP .NET 中使用 System.Drawing 命名空间中的类和方法可以轻松生成高质量且比例不失真的缩略图。可以使用以上的完整攻略和代码示例来解决您的实际问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET中高质量缩略图的生成代码 - Python技术站

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

相关文章

  • C#中实现伪静态页面两种方式介绍

    C#中实现伪静态页面两种方式介绍 什么是伪静态页面? 在 Web 应用程序中,URL 路径通常采用传统的参数传递方式,如 /index.aspx?id=123。伪静态页面则使用类似于静态页面的 URL 地址而不是传统的动态链接地址(如 PHP 中的 /index.php?id=123)。伪静态页面看起来像是真正的静态页面,但实际上仍然是由动态脚本生成的页面。…

    C# 2023年6月7日
    00
  • C#值类型、引用类型中的Equals和==的区别浅析

    C#值类型、引用类型中的Equals和==的区别浅析 相关概念 在讨论 Equals 和 == 的区别之前,我们先来了解一下 C# 中两种常见的数据类型:值类型和引用类型。 值类型 值类型指的是简单的数据类型,如 int、double、char 等等。值类型的数据在赋值和传递时,始终是复制一份数据,而不是像引用类型那样复制一份指向数据的指针。 int a =…

    C# 2023年5月15日
    00
  • asp.net读取excel文件的三种方法示例

    标题:ASP.NET读取Excel文件的三种方法示例 读取Excel文件是一个常见的需求,ASP.NET提供了多种方式读取Excel文件,本文将介绍三种方法示例。 1. 使用OleDbDataReader读取Excel文件 通过OleDbDataReader可以读取Excel文件的数据,需要注意的是,连接字符串中需要指定Excel文件的路径和名称,具体代码如…

    C# 2023年6月3日
    00
  • C#通过接口与线程通信(捕获线程状态)示例代码

    C#通过接口与线程通信(捕获线程状态)示例的完整攻略如下: 线程状态概述 在进行线程通信之前,先要理解线程的状态。在 C# 中,线程有以下几种状态: Unstarted: 表示线程已被创建,但未开始执行。 Running: 表示线程正在运行。 Stopped: 表示线程已经停止。 WaitSleepJoin: 表示线程正在等待被调用,或正在进行 Wait、S…

    C# 2023年5月15日
    00
  • Unity实现物体跟随鼠标移动

    下面是Unity实现物体跟随鼠标移动的完整攻略。 实现方式 我们可以通过以下几个步骤来实现物体跟随鼠标的移动: 首先,需要给物体添加鼠标拖拽事件(需要在 Update 函数中检测鼠标位置)。 然后,在鼠标按下时,计算出鼠标在屏幕上的位置与物体在场景中的位置的距离差(即偏移量)。 在鼠标移动时,通过计算鼠标在屏幕上的位置与之前计算的偏移量,可以得出物体应该被移…

    C# 2023年6月3日
    00
  • 用c# 自动更新程序

    做程序开发的朋友们都应该遇到过这样的问题,当你编写了一个程序并部署到用户端时,如果程序需要进行升级,你会面临一个很棘手的问题,那就是如何快速地将新版本的程序部署到用户端,并让用户端程序可以自动升级到最新版本?这就需要我们使用C#来编写一个自动更新程序。 以下是用C#实现自动更新程序的完整攻略: 1. 程序自身升级功能实现 在程序中添加自我升级功能,可以通过以…

    C# 2023年6月1日
    00
  • C#多线程中的互斥锁Mutex

    C#中的Mutex是一种互斥对象,它可以用于协调多个线程之间的共享资源的访问。Mutex在多线程并发访问共享资源时起到了防止冲突和保护数据的作用。在本文中,你将了解Mutex的基本概念、应用场景和如何使用Mutex实现多线程。 Mutex的基本概念 Mutex是一种互斥对象,它可以在多个线程之间协调共享资源的访问。当多个线程尝试访问共享资源时,只有一个线程可…

    C# 2023年6月1日
    00
  • 详解C# FileStream类

    详解C# FileStream类 FileStream类简介 FileStream类是C#中常用的文件读写类,它提供了对文件字节流进行读写的能力。通过FileStream,我们可以读取和写入二进制文件、文本文件、图像文件等各种类型的文件。 FileStream类非常强大,支持文件流的读写、位置控制、截断、同步等操作。如果您想要在C#中读取、写入文件,那么掌握…

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