惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
T
Threat Research - Cisco Blogs
H
Hacker News: Front Page
N
News and Events Feed by Topic
Know Your Adversary
Know Your Adversary
Cisco Talos Blog
Cisco Talos Blog
SecWiki News
SecWiki News
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tor Project blog
K
Kaspersky official blog
Forbes - Security
Forbes - Security
Webroot Blog
Webroot Blog
Schneier on Security
Schneier on Security
P
Privacy & Cybersecurity Law Blog
H
Heimdal Security Blog
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
V
Vulnerabilities – Threatpost
T
Tenable Blog
T
Tailwind CSS Blog
P
Privacy International News Feed
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
博客园 - Franky
Hacker News: Ask HN
Hacker News: Ask HN
Jina AI
Jina AI
C
Cybersecurity and Infrastructure Security Agency CISA
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
雷峰网
雷峰网
Vercel News
Vercel News
A
About on SuperTechFans
爱范儿
爱范儿
Simon Willison's Weblog
Simon Willison's Weblog
AWS News Blog
AWS News Blog
The Last Watchdog
The Last Watchdog
Engineering at Meta
Engineering at Meta
Spread Privacy
Spread Privacy
Security Archives - TechRepublic
Security Archives - TechRepublic
博客园 - 司徒正美
量子位
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
Hacker News - Newest:
Hacker News - Newest: "LLM"
Recorded Future
Recorded Future
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Martin Fowler
Martin Fowler
Project Zero
Project Zero

博客园 - pot

在框架中(IFRAME/FRAMESET)传递COOKIE的解决方案[转] jQuery图片播放插件Fancybox使用方法 数据抓取的一个类,包含一些常用的方法 抓取AJAX网页的方法-Firefox组件,C#集成 C#编号的ActiveX控件采用CAB的布署方式实例 C#编写ActiveX控件实例(包括命令和事件) PdfAcroViewer C#代码登录活动目录 用XML反序列化快速完成ASP.NET配置文件 - pot - 博客园 android Activity类的使用 Android中的Intent详细讲解 Android模拟器常用使用,和基本功能使用 ZPL II 命令参考 正则表达式语法 - pot - 博客园 《C#异常处理》 C#中接口的作用 The RSA key container could not be opened - pot ASP.NET 页面事件执行顺序 关于object sender,EventArgs e 的一些解释
C#生成缩略图代码
pot · 2012-02-29 · via 博客园 - pot

/**//// <summary> 
       
/// 生成缩略图 
       
/// </summary> 
       
/// <param name="originalImagePath">源图路径(物理路径)</param> 
       
/// <param name="thumbnailPath">缩略图路径(物理路径)</param> 
       
/// <param name="width">缩略图宽度</param> 
       
/// <param name="height">缩略图高度</param> 
       
/// <param name="mode">生成缩略图的方式</param>     
       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 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(00, towidth, toheight), 
               new Rectangle(x, y, ow,oh), 
               GraphicsUnit.Pixel); 

           try 
           {             
               //以jpg格式保存缩略图 
               bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); 
           } 
           catch(System.Exception e) 
           { 
               throw e; 
           } 
           finally 
           { 
               originalImage.Dispose(); 
               bitmap.Dispose();                         
               g.Dispose(); 
           } 
       } 

第二种

4个重载方法,有直接返回Image对象的,有生成缩略图,并且保存到指定目录的!

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

/// <summary>
/// 图片处理类
/// 1、生成缩略图片或按照比例改变图片的大小和画质
/// 2、将生成的缩略图放到指定的目录下
/// </summary>
public class ImageClass
{
    public Image ResourceImage;
    private int ImageWidth;
    private int ImageHeight;

    public string ErrMessage;

    /// <summary>
    
/// 类的构造函数
    
/// </summary>
    
/// <param name="ImageFileName">图片文件的全路径名称</param>
    public ImageClass(string ImageFileName)
    {
        ResourceImage=Image.FromFile(ImageFileName);
     ErrMessage="";
    }

    public bool ThumbnailCallback()
    {
     return false;
    }

    /// <summary>
    
/// 生成缩略图重载方法1,返回缩略图的Image对象
    
/// </summary>
    
/// <param name="Width">缩略图的宽度</param>
    
/// <param name="Height">缩略图的高度</param>
    
/// <returns>缩略图的Image对象</returns>
    public Image GetReducedImage(int Width,int Height)
    {
     try
     {
      Image ReducedImage;

      Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 
     
      ReducedImage=ResourceImage.GetThumbnailImage(Width,Height,callb,IntPtr.Zero);
  
      return ReducedImage;
     }
     catch(Exception e)
     {
      ErrMessage=e.Message; 
         return null;
     }
    }

    /// <summary>
    
/// 生成缩略图重载方法2,将缩略图文件保存到指定的路径
    
/// </summary>
    
/// <param name="Width">缩略图的宽度</param>
    
/// <param name="Height">缩略图的高度</param>
    
/// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg</param>
    
/// <returns>成功返回true,否则返回false</returns>
    public bool GetReducedImage(int Width,int Height,string targetFilePath)
    {
     try
     {
      Image ReducedImage;

      Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 
     
      ReducedImage=ResourceImage.GetThumbnailImage(Width,Height,callb,IntPtr.Zero);
      ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg);

      ReducedImage.Dispose(); 
  
      return true;
     }
     catch(Exception e)
     {
      ErrMessage=e.Message; 
      return false;
     }
    }

    /// <summary>
    
/// 生成缩略图重载方法3,返回缩略图的Image对象
    
/// </summary>
    
/// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>  
    
/// <returns>缩略图的Image对象</returns>
    public Image GetReducedImage(double Percent)
    {
     try
     {
      Image ReducedImage;

      Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback);

      ImageWidth=Convert.ToInt32(ResourceImage.Width*Percent);
      ImageHeight=Convert.ToInt32(ResourceImage.Width*Percent);
     
      ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero);
  
      return ReducedImage;
     }
     catch(Exception e)
     {
      ErrMessage=e.Message; 
      return null;
     }
    }

    /// <summary>
    
/// 生成缩略图重载方法4,返回缩略图的Image对象
    
/// </summary>
    
/// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>  
    
/// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg</param>
    
/// <returns>成功返回true,否则返回false</returns>
    public bool GetReducedImage(double Percent,string targetFilePath)
    {
     try
     {
      Image ReducedImage;

      Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback);

      ImageWidth=Convert.ToInt32(ResourceImage.Width*Percent);
      ImageHeight=Convert.ToInt32(ResourceImage.Width*Percent);
     
      ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero);

      ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg);

      ReducedImage.Dispose(); 
  
      return true;
     }
     catch(Exception e)
     {
      ErrMessage=e.Message; 
      return false;
     }
    }

}