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

本文共 2422 字,大约阅读时间需要 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+中发生一般性错误。”的错误提示。所以这里一定要注意写全。

 

 相关文章参考:

       )

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

 

转载于:https://www.cnblogs.com/babycool/archive/2012/11/18/2775916.html

你可能感兴趣的文章
react native 8081 端口号被占
查看>>
马尔代夫蜜月之旅
查看>>
EL表达式的简单实用
查看>>
python-异常处理
查看>>
python-docx 设置标题heading的中文字体类型+设置正文的中文字体类型
查看>>
[转帖] BIO与NIO、AIO的区别
查看>>
[转帖]哈佛结构和冯·诺依曼结构的区别
查看>>
Notepad++ 不打开历史文件
查看>>
ntp时间服务器
查看>>
A1047. 做明智的消费者
查看>>
pyhon时间输出
查看>>
P1518 两只塔姆沃斯牛 The Tamworth Two
查看>>
html的解析
查看>>
打印单词长度的直方图--C语言的多种实现
查看>>
PLSql的使用
查看>>
用CAShapeLayer实现一个简单的饼状图(PieView)
查看>>
LA 3644 易爆物
查看>>
uboot 信息解读
查看>>
越是忙的时候,兴趣越多
查看>>
信步漫谈之Eclipse—插件安装
查看>>