.net C#生成缩略图实现思路分解_实用技巧

复制代码 代码如下:

/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径</param>
/// <param name="thumbnailPath">缩略图路径</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式:HW指定高宽缩放(可能变形);W指定宽,高按比例 H指定高,宽按比例 Cut指定高宽裁减(不变形)</param>  
/// <param name="mode">要缩略图保存的格式(gif,jpg,bmp,png) 为空或未知类型都视为jpg</param>  
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode, string imageType)
{
Image originalImage = Image.FromFile(originalImagePath);
int towidth = width;
int toheight = height;
int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;
switch (mode)
{
case "HW"://指定高宽缩放(可能变形)        
break;
case "W"://指定宽,高按比例          
toheight = originalImage.Height * width / originalImage.Width;
break;
case "H"://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;
break;
case "Cut"://指定高宽裁减(不变形)        
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = 0;
x = (originalImage.Width - ow) / 2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = 0;
y = (originalImage.Height - oh) / 2;
}
break;
default:
break;
}
//新建一个bmp图片
Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
//新建一个画板
Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
new Rectangle(x, y, ow, oh),
GraphicsUnit.Pixel);
try
{
//以jpg格式保存缩略图
switch (imageType.ToLower())
{
case "gif":
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif);
break;
case "jpg":
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case "bmp":
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp);
break;
case "png":
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png);
break;
default:
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
break;
}
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}

时间: 2024-08-31 10:38:05

.net C#生成缩略图实现思路分解_实用技巧的相关文章

c#多图片上传并生成缩略图的实例代码_实用技巧

前台代码: 复制代码 代码如下:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %>  <!DOCTYPE html>  <html xmlns="http://www.w3.org/1999/xhtml"> <head runat

asp.net生成缩略图示例方法分享_实用技巧

做站的时候经常会遇到要生成缩略图的功能,因为可能不同的情况需要用来不同大小的缩略图. 本文生成的图片都为正方形,只有正方形的缩略图才是保证图片足够清晰. 当我我这里说的正方形是先按比例压缩,然后加一个固定的白底 然后居中显示. 代码: 新建outputimg.ashx 复制代码 代码如下: //调整图片大小private static Size NewSize(int maxWidth, int maxHeight, int Width, int Height)        {        

asp.net图片上传生成缩略图的注意事项_实用技巧

bitmap.Save(imgPath,ImageFormat.Jpeg);   //这是保存缩略图的一段代码,其中的ImageFormat.Jpeg一定不能省略,即使你保存的文件本来就是jpg格式的,也不能去掉.因为如果去掉的话,生成的缩略图比原始图片还要大! //另外,imgPath必须首先创建,否则会产生GDI+的一般性错误. path=System.Web.HttpContext.Current.Server.MapPath(path); 使用if(!System.IO.Director

利用ASPUPLOAD,ASPJPEG实现图片上传自动生成缩略图及加上水印_应用技巧

今天在站长站看到一网友写的相册程序,功能挺简单的,看到他用了ASPJPEG生成缩略图,不由想起再用上ASPUPLOAD上传,于是花了一个小时时间完善了他的代码. 以下代码均加有简单的注释,如果你看不懂,请先看ASPJPEG以及ASPUPLOAD的说明文档(E文,希望有心理准备),看不懂的可以问我. 以下是代码:  复制代码 代码如下: <%  if session("admin")<>"on" then  Response.Redirect&quo

ASP组件AspJpeg(加水印)生成缩略图等使用方法_应用技巧

一.为图片添加水印 复制代码 代码如下: <% Dim Jpeg ''''//声明变量 Set Jpeg = Server.CreateObject("Persits.Jpeg") ''''//调用组件 Jpeg.Open Server.MapPath("aaa.JPG") ''''//源图片位置 Jpeg.Canvas.Font.Color = &H000000 ''''//水印字体颜色 Jpeg.Canvas.Font.Family = "

C# 生成高质量缩略图程序—终极算法_实用技巧

先看代码: using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; /**//// <summary> ///  /// **生成高质量缩略图程序** ///  ///  File: GenerateThumbnail.cs ///  ///  Author: 周振兴 (Zxjay 飘遥) ///  ///  E-Mail: tda7264@163.com

asp.net上传图片并作处理水印与缩略图的实例代码_实用技巧

方法类: 复制代码 代码如下: upFileClass.cs using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlC

Asp.net mvc实时生成缩率图到硬盘_实用技巧

对于缩率图的处理是在图片上传到服务器之后,同步生成两张不同尺寸的缩率供前端调用,刚开始还能满足需求,慢慢的随着前端展示的多样化,缩率图已不能前端展示的需求,所以考虑做一个实时生成图片缩率图服务. 每次调用实时生成缩率图,不缓存着实有点浪费,所以在生成缩率的同时缓存到硬盘一份,效率提高很多. 之前从网上看了一下有人用nginx + lua实现的,效率那是没什么可说的,但是时间紧迫,自己也没时间去研究,所以暂时先用aps.net mvc4来实现 一个,以后有时间了,再慢慢修改. 用自己熟悉的.net

.Net core下直接执行SQL语句并生成DataTable的实现方法_实用技巧

.net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs").ToList().而不允许返回DataSet.DataTable等弱类型.可能由于这个原因没有实现在.net core中DataTable,然而DataTable还是可能会用到的.我们这里就有一个数据仓库的需求,允许用户自行编写类似SQL语句,然后执行,以表格展示.因为语句是千变万化的,因此我也