一般都是用自带的那个类实现图片的缩略图,但小图还行,生成大点的图就很模糊了。

生成图片的ImageUtil.cs类

 

 

using System;
using System.Collections.Generic;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Net;
using System.IO;

/// <summary>
/// ImageUtil 的摘要说明
/// </summary>
public class ImageUtil
{
    
/// <summary>
    
/// 创建缩略图
    
/// </summary>
    
/// <param name="src">来源页面
    
/// 可以是相对地址或者绝对地址
    
/// </param>
    
/// <param name="width">缩略图宽度</param>
    
/// <param name="height">缩略图高度</param>
    
/// <returns>字节数组</returns>
    public static byte[] MakeThumbnail(string src, double width, double height)
    {
        Image image;

        
// 相对路径从本机直接读取
        if (src.ToLower().IndexOf("http://"== -1)
        {
            src 
= HttpContext.Current.Server.MapPath(src);
            image 
= Image.FromFile(src, true);
        }
        
else // 绝对路径从 Http 读取
        {
            HttpWebRequest req 
= (HttpWebRequest)WebRequest.Create(src);
            req.Method 
= "GET";
            HttpWebResponse resp 
= (HttpWebResponse)req.GetResponse();
            Stream receiveStream 
= resp.GetResponseStream();
            image 
= Image.FromStream(receiveStream);
            resp.Close();
            receiveStream.Close();
        }
        
double newWidth, newHeight;
        
if (image.Width > image.Height)
        {
            newWidth 
= width;
            newHeight 
= image.Height * (newWidth / image.Width);
        }
        
else
        {
            newHeight 
= height;
            newWidth 
= (newHeight / image.Height) * image.Width;
        }
        
if (newWidth > width)
        {
            newWidth 
= width;
        }
        
if (newHeight > height)
        {
            newHeight 
= height;
            newWidth 
= image.Width * (newHeight / image.Height);
        }
        
//取得图片大小
        Size size = new Size((int)newWidth, (int)newHeight);
        
//新建一个bmp图片
        Image bitmap = new Bitmap(size.Width, size.Height);
        
//新建一个画板
        Graphics g = Graphics.FromImage(bitmap);
        
//设置高质量插值法
        g.InterpolationMode = InterpolationMode.High;
        
//设置高质量,低速度呈现平滑程度
        g.SmoothingMode = SmoothingMode.HighQuality;
        
//清空一下画布
        g.Clear(Color.White);
        
//在指定位置画图
        g.DrawImage(image, new Rectangle(00, bitmap.Width, bitmap.Height),
                    
new Rectangle(00, image.Width, image.Height),
                    GraphicsUnit.Pixel);
        
//保存高清晰度的缩略图
        MemoryStream stream = new MemoryStream();
        bitmap.Save(stream, ImageFormat.Jpeg);
        
byte[] buffer = stream.GetBuffer();
        g.Dispose();
        image.Dispose();
        bitmap.Dispose();
        
return buffer;
    }
}

 

 

 

使用Thumbnail.ashx做为调用的文件地址(ashx处理的比aspx的速度快)

 

 

;
        }
    }

}

 

 

 

 

相关文章:

  • 2021-09-14
  • 2021-07-17
  • 2021-11-19
  • 2021-10-28
  • 2021-08-07
猜你喜欢
  • 2021-07-04
  • 2022-12-23
  • 2022-12-23
  • 2021-12-22
  • 2021-09-03
  • 2022-02-20
相关资源
相似解决方案