`
long546324
  • 浏览: 207037 次
  • 性别: Icon_minigender_1
  • 来自: 云南
社区版块
存档分类
最新评论

ASP.NET生成高质量缩略图通用函数(VB.NET、c#代码)

    博客分类:
  • .net
阅读更多

  
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode) 
  { 
  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 Bitmap(towidth, toheight); 
  //新建一个画板 
  Graphics g = Graphics.FromImage(bitmap); 
  //设置高质量插值法 
  g.InterpolationMode = InterpolationMode.High; 
  //设置高质量,低速度呈现平滑程度 
  g.SmoothingMode = 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格式保存缩略图 
  bitmap.Save(thumbnailPath, ImageFormat.Jpeg); 
  } 
  catch (Exception e) 
  { 
  throw e; 
  } 
  finally 
  { 
  originalImage.Dispose(); 
  bitmap.Dispose(); 
  g.Dispose(); 
  } 
  } 

 ' <param name="originalImagePath">源图路径(物理路径)</param>
    ' <param name="thumbnailPath">缩略图路径(物理路径)</param>
    ' <param name="width">缩略图宽度</param>
    ' <param name="height">缩略图高度</param>
    ' <param name="mode">生成缩略图的方式</param>    
    Public Shared Sub MakeThumbnail(ByVal originalImagePath As String, ByVal thumbnailPath As String, ByVal width As Integer, ByVal height As Integer, ByVal mode As String)
        Dim originalImage As System.Drawing.Image
        originalImage = System.Drawing.Image.FromFile(originalImagePath)

        Dim towidth As Integer = width
        Dim toheight As Integer = height

        Dim x As Integer = 0
        Dim y As Integer = 0
        Dim ow As Integer = originalImage.Width
        Dim oh As Integer = originalImage.Height

        Select Case mode
            Case "HW" '指定高宽缩放(可能变形)                
            Case "W" '指定宽,高按比例                    
                toheight = originalImage.Height * width / originalImage.Width
            Case "H" '指定高,宽按比例
                towidth = originalImage.Width * height / originalImage.Height
            Case "Cut" '指定高宽裁减(不变形)                
                If CDbl(originalImage.Width) / CDbl(originalImage.Height) > CDbl(towidth) / CDbl(toheight) Then
                    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
                End If
            Case Else
        End Select

        '新建一个bmp图片
        Dim bitmap = New System.Drawing.Bitmap(towidth, toheight)

        '新建一个画板
        Dim g As Graphics = 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格式保存缩略图
            bitmap.Save(thumbnailPath)
        Catch ex As Exception
            Throw ex
        Finally
            originalImage.Dispose()
            bitmap.Dispose()
            g.Dispose()
        End Try
    End Sub

文章出处:DIY部落(http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008324/106450.html)
分享到:
评论

相关推荐

    PHP/Asp/Asp.Net缩略图模式批量上传图片并生成缩略图片

    2. **上传处理**:在后台代码(C#或VB.NET)中,遍历`FileUpload.PostedFiles`,对每个文件进行上传操作。 3. **生成缩略图**:可以使用System.Drawing命名空间中的类,如Bitmap和Graphics,来创建缩略图。也可以...

    asp.net从视频文件生成图像文件源代码下载.rar

    这个"asp.net从视频文件生成图像文件源代码下载.rar"的资源是针对ASP.NET后端开发的一个实用示例,它涉及到从视频文件中提取帧并将其转换为图像文件的技术。在本文中,我们将深入探讨这个主题,包括必要的理论知识和...

    asp.net常用函数表

    在ASP.NET中,开发者可以使用C#、VB.NET等编程语言,通过一系列的内置函数和类库来实现各种功能。 标题"asp.net常用函数表"所指的是在ASP.NET开发过程中经常使用的函数集合。这些函数涵盖了字符串处理、文件操作、...

    .net图片轮换新闻代码

    .NET是微软推出的一个开源开发平台,它提供了多种编程语言(如C#、VB.NET等)的支持,以及丰富的类库和工具,用于构建各种类型的跨平台应用程序,包括Web应用。 实现图片轮换新闻功能的关键组件包括: 1. **数据库...

    幻灯片式浏览图片asp.net结合autoviewer.swf

    每个图片的URL可以指向服务器上存储的图片文件,或者如果需要进一步的处理(如缩略图生成),可以指向一个处理图片的ASP.NET页面。在生成的XML文件中,列出所有图片的路径和相关属性,如标题和描述,供Autoviewer...

    ASP.NET源码——Jquery+.net实现图像缩放截取(类似开心网).zip

    开发者可能使用C#或VB.NET编写后端代码,处理用户提交的图像截取坐标,将截取的图像数据保存为新的文件,或者直接处理这些数据以生成缩略图或其他格式的图像。 此外,为了实现与服务器的交互,开发者可能会使用AJAX...

    上传本地图片的asp.net文本编辑器

    另外,可能还需要考虑图片的缩略图生成和存储优化。 通过以上步骤,我们可以成功地在ASP.NET环境中集成一个支持本地图片上传的文本编辑器。这个功能大大增强了用户的在线创作体验,使得他们能够在网页上轻松地插入...

    asp上传图片

    在提供的部分代码中,可以看到使用VB.NET编写的ASP.NET代码段。代码首先检查上传的文件是否存在,如果存在,则继续处理,包括显示文件信息、保存文件、生成缩略图等步骤。接着,代码通过ADO.NET与数据库交互,插入...

    swfupload上传组件

    .NET提供了多种语言支持,如C#、VB.NET等,可以构建处理文件上传的Web服务或ASP.NET页面。后端代码通常负责接收前端通过SWFUpload发送的文件,处理文件存储、验证、数据库记录等相关逻辑。 **SWFUpload的工作原理**...

Global site tag (gtag.js) - Google Analytics