asp.net生成缩略图实现代码

生成缩略图是一个常见的需求,在asp.net中实现也比较简单。可以通过使用System.Drawing命名空间下的Image类来完成生成缩略图的功能。下面分步骤详细讲解如何实现:

步骤一:引用命名空间

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

步骤二:加载图片

首先需要对要生成缩略图的图片进行加载,这里我们以“test.jpg”为例。

string filePath = Server.MapPath("~/images/test.jpg");
Image img = Image.FromFile(filePath);

步骤三:计算缩略图的尺寸

在生成缩略图之前需要根据图片的实际尺寸计算生成的缩略图的尺寸,一般情况下可以进行等比例缩放。

// 缩略图最大尺寸
int thumbnailWidth = 100;
int thumbnailHeight = 100;

// 计算缩略图的尺寸
int width = img.Width;
int height = img.Height;
if (width > height)
{
    thumbnailHeight = (int)(height * ((double)thumbnailWidth / width));
}
else
{
    thumbnailWidth = (int)(width * ((double)thumbnailHeight / height));
}

步骤四:生成缩略图

根据计算得到的缩略图的尺寸生成缩略图。需要注意的是,根据生成的缩略图尺寸,需要设置生成缩略图的质量。

// 生成缩略图
using (Image thumbnail = img.GetThumbnailImage(thumbnailWidth, thumbnailHeight, null, IntPtr.Zero))
{
    // 设置缩略图的质量
    EncoderParameters encoderParams = new EncoderParameters(1);
    encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 80L);

    // 保存缩略图
    using (var ms = new MemoryStream())
    {
        thumbnail.Save(ms, ImageFormat.Jpeg);
        byte[] data = ms.ToArray();
        File.WriteAllBytes(Server.MapPath("~/images/test_thumbnail.jpg"), data);
    }
}

以上就是asp.net生成缩略图实现代码的完整攻略。

示例一:生成指定尺寸的缩略图

// 缩略图尺寸
int thumbnailWidth = 150;
int thumbnailHeight = 150;

// 加载图片
string filePath = Server.MapPath("~/images/test.jpg");
Image img = Image.FromFile(filePath);

// 计算缩略图的尺寸
int width = img.Width;
int height = img.Height;
if (width > height)
{
    thumbnailHeight = (int)(height * ((double)thumbnailWidth / width));
}
else
{
    thumbnailWidth = (int)(width * ((double)thumbnailHeight / height));
}

// 生成缩略图
using (Image thumbnail = img.GetThumbnailImage(thumbnailWidth, thumbnailHeight, null, IntPtr.Zero))
{
    // 设置缩略图的质量
    EncoderParameters encoderParams = new EncoderParameters(1);
    encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 80L);

    // 保存缩略图
    using (var ms = new MemoryStream())
    {
        thumbnail.Save(ms, ImageFormat.Jpeg);
        byte[] data = ms.ToArray();
        File.WriteAllBytes(Server.MapPath("~/images/test_thumbnail_150x150.jpg"), data);
    }
}

示例二:生成固定质量的缩略图

// 缩略图尺寸
int thumbnailWidth = 200;
int thumbnailHeight = 200;

// 加载图片
string filePath = Server.MapPath("~/images/test.jpg");
Image img = Image.FromFile(filePath);

// 计算缩略图的尺寸
int width = img.Width;
int height = img.Height;
if (width > height)
{
    thumbnailHeight = (int)(height * ((double)thumbnailWidth / width));
}
else
{
    thumbnailWidth = (int)(width * ((double)thumbnailHeight / height));
}

// 生成缩略图
using (Image thumbnail = img.GetThumbnailImage(thumbnailWidth, thumbnailHeight, null, IntPtr.Zero))
{
    // 设置缩略图的质量
    EncoderParameters encoderParams = new EncoderParameters(1);
    encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 50L);

    // 保存缩略图
    using (var ms = new MemoryStream())
    {
        thumbnail.Save(ms, ImageFormat.Jpeg);
        byte[] data = ms.ToArray();
        File.WriteAllBytes(Server.MapPath("~/images/test_thumbnail_200x200.jpg"), data);
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net生成缩略图实现代码 - Python技术站

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

相关文章

  • .NET反向代理组件YARP介绍

    以下是“.NET反向代理组件YARP介绍”的完整攻略: 什么是YARP YARP(Yet Another Reverse Proxy)是一个开源的反向代理组件由微软开发。它是一个轻量级、高性能、可扩展的反向代理组件,可以用于构建高性能的服务网关、API网关等。 YARP的特性 YARP具有以下特性: 支持HTTP、HTTPS、WebSocket等协议 支持负…

    C# 2023年5月12日
    00
  • 解析C#中[],List,Array,ArrayList的区别及应用

    下面我将详细讲解“解析C#中[], List, Array, ArrayList的区别及应用”的完整攻略。 []操作符 []操作符是C#语言中的数组索引操作符,用来获取数组中的元素。一个数组可以被看成是一个特殊的集合,它包含一组有相同类型的变量或对象。数组元素的下标是从0开始的,这意味着第一个元素的下标为0,第二个元素的下标为1,以此类推。 使用[]操作符访…

    C# 2023年6月1日
    00
  • C# 设置Chart的X轴为时间轴​​​​​​​详情

    下面是关于C#设置Chart的X轴为时间轴的完整攻略: 步骤一:添加 NuGet 包 在 Visual Studio 中打开相应的项目,右键单击项目并选择“管理 NuGet 包”。在 NuGet 界面的搜索栏中输入“System.Windows.Forms.DataVisualization”,选择“System.Windows.Forms.DataVisu…

    C# 2023年6月1日
    00
  • C# ThreadPool之QueueUserWorkItem使用案例详解

    C# ThreadPool之QueueUserWorkItem使用案例详解 这篇文章介绍了C#中的线程池,及其使用方式之一:QueueUserWorkItem方法。接下来,我会更详细地讲解这篇文章的重点内容,以及为何可以使用它来实现线程池。 什么是线程池? 在线程池中,管理器维护多个已经创建的线程,使每个线程可以被重复利用,从而达到节省线程创建时间的目的,提…

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

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

    C# 2023年4月27日
    00
  • C#编程中最容易犯的7种编写错误分享

    下面我将为你详细讲解“C#编程中最容易犯的7种编写错误分享”的完整攻略: 1. 变量使用错误 在C#编程中最常见的错误之一就是变量使用错误。可能会出现以下情况:- 变量未初始化,导致出现未知的值- 变量名与其他变量名冲突,造成混淆- 变量没有按照规定使用,造成计算错误 为避免这些问题,我们需要遵循以下准则:- 变量使用前必须初始化- 使用有意义的变量名- 识…

    C# 2023年5月15日
    00
  • C#中如何利用正则表达式判断字符

    下面是关于 C# 中利用正则表达式判断字符的攻略: 判断单个字符是否匹配正则表达式 在 C# 中,可以利用 Regex.IsMatch() 函数来判断一个字符串是否匹配某个正则表达式。如果需要判断单个字符是否符合正则表达式,需要先将该字符转换为字符串,然后再调用 Regex.IsMatch() 进行判断。示例如下: char c = ‘A’; // 需要判断…

    C# 2023年6月6日
    00
  • asp.net 大文件上传控件

    概述ASP.NET是微软推出的一组web应用程序框架和编程模型,用于创建动态网站、web应用程序和web服务。ASP.NET大文件上传控件在开发中非常有用。本文将详细介绍如何使用ASP.NET大文件上传控件。 下载和安装在开始使用ASP.NET大文件上传控件之前,我们需要先下载和安装它。可以从官方网站获取ASP.NET大文件上传控件的最新版本,解压缩文件,然…

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