.net mvc中上传图片生成缩略图

        #region CreateThumbnail
        /// <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="uploadObject">上传的HttpPostedFile或图片物理路径</param>
        /// <param name="uploaddir">上传文件夹相对路径</param>
        /// <param name="ext">后缀(如:.jpg)</param>
        /// <param name="t_width">缩略图宽</param>
        /// <param name="t_height">缩略图高</param>
        /// <param name="filename">文件夹,不含路径和后缀</param>
        /// <param name="tm">枚举类-缩略图的样式</param>
        /// <returns>返回生成图片的路径</returns>
        public static string CreateThumbnail(object uploadObject, string uploaddir, string ext, int t_width, int t_height, string filename, ThumbModel tm)
        {
            System.Drawing.Image thumbnail_image = null;
            System.Drawing.Image original_image = null;
            System.Drawing.Bitmap final_image = null;
            System.Drawing.Graphics graphic = null;
            MemoryStream ms = null;
            string ThumbnailFilename = "";
            try
            {
                if (uploadObject is HttpPostedFileBase)
                {
                    HttpPostedFileBase jpeg_image_upload = uploadObject as HttpPostedFileBase;
                    original_image = System.Drawing.Image.FromStream(jpeg_image_upload.InputStream);
                }
                else if (uploadObject is HttpPostedFile)
                {
                    HttpPostedFile jpeg_image_upload = uploadObject as HttpPostedFile;
                    original_image = System.Drawing.Image.FromStream(jpeg_image_upload.InputStream);
                }
                else
                {
                    string jpeg_image_upload = uploadObject as string;
                    original_image = System.Drawing.Image.FromFile(jpeg_image_upload);
                }
                // Calculate the new width and height
                int original_paste_x = 0;
                int original_paste_y = 0;
                int original_width = original_image.Width;//截取原图宽度
                int original_height = original_image.Height;//截取原图高度
                int target_paste_x = 0;
                int target_paste_y = 0;
                int target_width1 = t_width;
                int target_height1 = t_height;
                if (tm == ThumbModel.NoDeformationAllThumb)
                {
                    float target_ratio = (float)t_width / (float)t_height;//缩略图 宽、高的比例
                    float original_ratio = (float)original_width / (float)original_height;//原图 宽、高的比例

                    if (target_ratio > original_ratio)//宽拉长
                    {
                        target_height1 = t_height;
                        target_width1 = (int)Math.Floor(original_ratio * (float)t_height);
                    }
                    else
                    {
                        target_height1 = (int)Math.Floor((float)t_width / original_ratio);
                        target_width1 = t_width;
                    }

                    target_width1 = target_width1 > t_width ? t_width : target_width1;
                    target_height1 = target_height1 > t_height ? t_height : target_height1;
                    target_paste_x = (t_width - target_width1) / 2;
                    target_paste_y = (t_height - target_height1) / 2;
                }
                else if (tm == ThumbModel.NoDeformationCenterThumb)
                {
                    float target_ratio = (float)t_width / (float)t_height;//缩略图 宽、高的比例
                    float original_ratio = (float)original_width / (float)original_height;//原图 宽、高的比例

                    if (target_ratio > original_ratio)//宽拉长
                    {
                        original_height = (int)Math.Floor((float)original_width / target_ratio);
                    }
                    else
                    {
                        original_width=(int)Math.Floor((float)original_height * target_ratio);
                    }
                    original_paste_x = (original_image.Width - original_width) / 2;
                    original_paste_y = (original_image.Height - original_height) / 2;
                }
                else if(tm == ThumbModel.NoDeformationCenterBig)
                {
                    original_paste_x = (original_width - target_width1) / 2;
                    original_paste_y = (original_height - target_height1) / 2;
                    if(original_height>target_height1) original_height=target_height1;
                    if (original_width > target_width1) original_width = target_width1;
                }

                final_image = new System.Drawing.Bitmap(t_width, t_height);
                graphic = System.Drawing.Graphics.FromImage(final_image);
               // graphic.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.White), new System.Drawing.Rectangle(0, 0, t_width, t_height));//背景颜色

                graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; /* new way */
                graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                graphic.Clear(Color.White);//背景
                Rectangle SrcRec = new Rectangle(original_paste_x, original_paste_y, original_width, original_height);
                Rectangle targetRec = new Rectangle(target_paste_x, target_paste_y, target_width1, target_height1);
                graphic.DrawImage(original_image, targetRec, SrcRec, GraphicsUnit.Pixel);
                string saveFileName = uploaddir + filename + "_small" + ext;
                using (FileStream fs = new FileStream(HttpContext.Current.Server.MapPath("/" + saveFileName), FileMode.Create))
                {
                    final_image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
                    ThumbnailFilename = saveFileName;
                }
            }
            catch
            {
                // If any kind of error occurs return a 500 Internal Server error
                HttpContext.Current.Response.StatusCode = 500;
                HttpContext.Current.Response.Write("An error occured");
                HttpContext.Current.Response.End();
            }
            finally
            {
                // Clean up
                if (final_image != null) final_image.Dispose();
                if (graphic != null) graphic.Dispose();
                if (original_image != null) original_image.Dispose();
                if (thumbnail_image != null) thumbnail_image.Dispose();
                if (ms != null) ms.Close();
            }
            return ThumbnailFilename;
        }

        #endregion

    public enum ThumbModel
    {
        /// <summary>
        /// 不变形,全部(缩略图)
        /// </summary>
        NoDeformationAllThumb,
        /// <summary>
        /// 变形,全部填充(缩略图)
        /// </summary>
        DeformationAllThumb,
        /// <summary>
        /// 不变形,截中间(缩略图)
        /// </summary>
        NoDeformationCenterThumb,
        /// <summary>
        /// 不变形,截中间(非缩略图)
        /// </summary>
        NoDeformationCenterBig
    }

理论效果:

原测试图:

效果:

时间: 2024-08-21 18:40:30

.net mvc中上传图片生成缩略图的相关文章

php上传图片生成缩略图(GD库)_php技巧

首先来一段简单的php上传图片生成缩略图的详细代码,分享给大家供大家参考,具体内容如下 <?php function createThumbnail($imageDirectory, $imageName, $thumbDirectory, $thumbWidth, $quality){ $details = getimagesize("$imageDirectory/$imageName") or die('Please only upload images.'); $type

asp.net 上传图片生成缩略图效果

下面这个.net操作类是一款图片操作类,他的原理是很把图片上传到远程服务器,然后再根据用户设置生成小图或其它操作,有需要的朋友可以参考一下. public class imghelp     {         //public static string gif = "image/gif";         //public static string jpg = "image/pjpeg";         //public static string png

Nginx服务器中用于生成缩略图的模块配置教程_nginx

ngx_image_thumb模块生成缩略图 ngx_image_thumb是nginx中用来生成缩略图的模块,生存缩略图的方法很多,本nginx模块主要功能是对请求的图片进行缩略/水印处理,支持文字水印和图片水印.支持自定义字体,文字大小,水印透明度,水印位置,判断原图是否是否大于指定尺寸才处理等等.1. 编译方法编译前请确认您的系统已经安装了libcurl-dev libgd2-dev libpcre-dev 依赖库1.1 Debian / Ubuntu 系统举例 # 如果你没有安装GCC相

ASP.NET实现上传图片并生成缩略图的方法_实用技巧

本文实例讲述了ASP.NET实现上传图片并生成缩略图的方法.分享给大家供大家参考,具体如下: protected void bt_upload_Click(object sender, EventArgs e) { //检查上传文件的格式是否有效 if (this.UploadFile.PostedFile.ContentType.ToLower().IndexOf("image") < 0) { Response.Write("上传图片格式无效!"); re

图片上传生成缩略图报Unsupported color conversion request异常

问题描述 sun.awt.image.ImageFormatException:Unsupportedcolorconversionrequestatsun.awt.image.JPEGImageDecoder.readImage(NativeMethod)atsun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:119)atsun.awt.image.InputStreamImageSource.doFetch(In

在ASP.NET中上传图片并生成缩略图的C#源码

asp.net|上传|上传图片|缩略图 在ASP.NET中上传图片并生成缩略图的C#源码 using System;   using System.Collections;   using System.ComponentModel;   using System.Data;   using System.Drawing;   using System.Web;   using System.Web.SessionState;   using System.Web.UI;   using Sys

在ASP.NET中上传图片并生成缩略图

在ASP.NET中上传图片并生成缩略图,可以参照下列代码: private void btnUploadPicture_Click(object sender, System.EventArgs e){//检查上传文件的格式是否有效if(this.UploadFile.PostedFile.ContentType.ToLower().IndexOf("image") < 0){Response.Write("上传图片格式无效!");return;}//生成原图

在ASP.NET中上传图片并生成带版权信息的缩略图

asp.net|上传|上传图片|缩略图 前台:<HTML>    <HEAD>        <title>WebForm3</title>            </HEAD>    <body>        <form id="Form1" method="post" runat="server">             <INPUT id=&quo

springmvc-spring mvc做上传图片,文件小于10k就不生成临时文件了

问题描述 spring mvc做上传图片,文件小于10k就不生成临时文件了 这是spring-mvc.xml中的 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartRe solver"> <property name="defaultEncoding" value="UTF-8&qu