.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();
}
}

(0)

相关推荐

  • c#生成高清缩略图的二个示例分享

    复制代码 代码如下: /// <summary>  /// 为图片生成缩略图    /// </summary>  /// <param name="phyPath">原图片的路径</param> /// <param name="width">缩略图宽</param>  /// <param name="height">缩略图高</param>  /

  • c#多图片上传并生成缩略图的实例代码

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

  • c#生成图片缩略图的类(2种实现思路)

    第一种 复制代码 代码如下: /**//// <summary> /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理路径)</param> /// <param name="width&quo

  • c#生成缩略图的实现方法

    复制代码 代码如下: private void SaveThumbnail(Bitmap originBitmap, int width, int height, string directory, string filename, string extension){    var physicalPath = directory + filename + extension; using (var newImage = new Bitmap(width, height))    {     

  • C#简单生成缩略图的方法

    本文实例讲述了C#简单生成缩略图的方法.分享给大家供大家参考.具体实现方法如下: /// <summary> /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理路径)</param> /// <para

  • C#创建缩略图操作类实例

    本文实例讲述了C#创建缩略图操作类.分享给大家供大家参考.具体分析如下: 这个C#类可以生成各种形式的缩略图,可以自动保持图片比例缩略,可以根据百分比获得图片尺寸等 using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; namespace HtmlSnap { public static class ImageHelper { /// <summary

  • C#实现为一张大尺寸图片创建缩略图的方法

    本文实例讲述了C#实现为一张大尺寸图片创建缩略图的方法.分享给大家供大家参考.具体实现方法如下: public static Bitmap CreateThumbnail(string lcFilename, int lnWidth, int lnHeight) { System.Drawing.Bitmap bmpOut = null; try { Bitmap loBMP = new Bitmap(lcFilename); ImageFormat loFormat = loBMP.RawFo

  • C#获取视频某一帧的缩略图的方法

    本文实例讲述了C#获取视频某一帧的缩略图的方法.分享给大家供大家参考.具体实现方法如下: 读取方式:使用ffmpeg读取,所以需要先下载ffmpeg.网上资源有很多. 原理是通过ffmpeg执行一条命令获取视频某一帧的缩略图. 首先,需要获取视频的帧高度和帧宽度,这样获取的缩略图才不会变形. 获取视频的帧高度和帧宽度可以参考:http://www.jb51.net/article/57475.htm. 获取到视频的帧高度和帧宽度后,还需要获取缩略图的高度和宽度,这是按比例缩放的. 比如你存放缩略

  • 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

  • c#生成缩略图不失真的方法实例分享

    复制代码 代码如下: /// <summary>/// 获得缩微图/// </summary>/// <returns></returns>  public bool GetThumbImg(){try{string imgpath; //原始路径     if(imgsourceurl.IndexOf("\",0)<0) //使用的是相对路径     {imgpath = HttpContext.Current.Server.Ma

随机推荐