博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片等比例缩放
阅读量:6450 次
发布时间:2019-06-23

本文共 2451 字,大约阅读时间需要 8 分钟。

 由于最近开发的项目中需要对上传的大图片做裁剪、缩放处理。所以整理了一下。特此记录。

        方法: 

      public class ImageHandler

    {
        
///
 
<summary>
        
///
 对上传的图片进行等比缩放
        
///
 
</summary>
        
///
 
http://www.cnblogs.com/babycool
        
///
 
<param name="fromFile">
获取文件流Stream
</param>
        
///
 
<param name="fileSaveUrl">
缩略图保存完整路径
</param>
        
///
 
<param name="targetWidth">
模板宽度
</param>
        
///
 
<param name="targetHeight">
模板高度
</param>
        
public 
static 
void ZoomPic(System.IO.Stream fromFile, 
string fileSaveUrl, System.Double targetWidth, System.Double targetHeight)
        {
            
//
原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)
            System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, 
true);
            
//
原图宽高均小于模版,不作处理,直接保存
            
if (initImage.Width <= targetWidth && initImage.Height <= targetHeight)
            {
                
//
保存
                initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            
else
            {
                
//
缩略图宽、高计算
                
double newWidth = initImage.Width;
                
double newHeight = initImage.Height;
              
//
宽大于高或宽等于高(横图或正方)
                
if (initImage.Width > initImage.Height || initImage.Width == initImage.Height)
                {
                    
//
如果宽大于模版
                    
if (initImage.Width > targetWidth)
                    {
                        
//
宽按模版,高按比例缩放
                        newWidth = targetWidth;
                        newHeight = initImage.Height * (targetWidth / initImage.Width);
                    }
                }
                
//
高大于宽(竖图)
                
else
                {
                    
//
如果高大于模版
                    
if (initImage.Height > targetHeight)
                    {
                        
//
高按模版,宽按比例缩放
                        newHeight = targetHeight;
                        newWidth = initImage.Width * (targetHeight / initImage.Height);
                    }
                }
                
//
生成新图
                
//
新建一个bmp图片
                System.Drawing.Image newImage = 
new System.Drawing.Bitmap((
int)newWidth, (
int)newHeight);
                
//
新建一个画板
                System.Drawing.Graphics newG = System.Drawing.Graphics.FromImage(newImage);
                
//
设置质量
                newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                
//
置背景色
                newG.Clear(Color.White);
                
//
画图
                newG.DrawImage(initImage, 
new System.Drawing.Rectangle(
0
0, newImage.Width, newImage.Height), 
new System.Drawing.Rectangle(
0
0, initImage.Width, initImage.Height), System.Drawing.GraphicsUnit.Pixel);
                
//
保存缩略图
                newImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
                
//
释放资源
                newG.Dispose();
                newImage.Dispose();
                initImage.Dispose();
            }
            
        }
    }

 

 

 调用:

        //接收上传后的文件

       HttpPostedFile file = context.Request.Files[
"
Filedata
"
];

        //处理图片

       ImageHandler.ZoomPic(file.InputStream, uploadPath + file.FileName, 
435
,
600
);

 

注意:ZoomPic方法中的第二个参数“fileSaveUrl”是缩略图保存的完整路径如“uploadPath\123.jpg”的形式,如果只有目录路径则会报“GDI+中发生一般性错误。”的错误提示。所以这里一定要注意写全。

 

 相关文章参考:

       )

 原创文章,转载请注明出处。

 

本文转自 酷小孩 博客园博客,原文链接:http://www.cnblogs.com/babycool/archive/2012/11/18/2775916.html  ,如需转载请自行联系原作者

你可能感兴趣的文章
天气驱动行业销售大数据(转)
查看>>
发现保存GIF格式后相素发生变化咋办
查看>>
CorelDRAW中如何分布对象
查看>>
(\w+)\s*, \s*(\w+)
查看>>
2018.2.20 寒假作业 A - Multiplication Puzzle
查看>>
作业控制
查看>>
利用ansible批量部署zabbix-agent
查看>>
B2c商城图片尺寸设定研究 尺寸应该多大合适
查看>>
成功面试
查看>>
linux复制、移动覆盖文件不提示
查看>>
spring注解使用介绍
查看>>
zabbix分布式监控4(2.4)
查看>>
柏林噪声产生火焰等纹理
查看>>
我的友情链接
查看>>
LRUMap
查看>>
my.cnf文件详解
查看>>
1800: [Ahoi2009]fly 飞行棋
查看>>
Oracle误删数据文件灾难恢复-Linux_ghan-ChinaUnix博客
查看>>
有关CCDatavisitor.h #include <string> 文件无法找到的问题
查看>>
ES6基础之const声明
查看>>