`
liyonghui160com
  • 浏览: 777112 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C# Ajax上传图片同时生成微缩图(附Demo)

    博客分类:
  • c#
阅读更多

 

 

1.Ajax无刷新上传图片,详情请阅我的这篇文章。(jquery + c# ashx)

        2.C#位图处理  System.Drawing。

        3.最新demo支持IE7,IE8,FireFox。

生成微缩图的核心方法:

 

CreateThumbnailPicture

        /// <summary>
        /// 图片微缩图处理
        /// </summary>
        /// <param name="srcPath">源图片</param>
        /// <param name="destPath">目标图片</param>
        /// <param name="width">宽度</param>
        /// <param name="height">高度</param>
        public static void CreateThumbnailPicture(string srcPath, string destPath, int width, int height)
        {
            //根据图片的磁盘绝对路径获取 源图片 的Image对象
            System.Drawing.Image img = System.Drawing.Image.FromFile(srcPath);

            //bmp: 最终要建立的 微缩图 位图对象。
            Bitmap bmp = new Bitmap(width, height);

            //g: 绘制 bmp Graphics 对象
            Graphics g = Graphics.FromImage(bmp);
            g.Clear(Color.Transparent);
            //为Graphics g 对象 初始化必要参数,很容易理解。
            g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

            //源图片宽和高
            int imgWidth = img.Width;
            int imgHeight = img.Height;

            //绘制微缩图
            g.DrawImage(img, new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(0, 0, imgWidth, imgHeight)
                        , GraphicsUnit.Pixel);

            ImageFormat format = img.RawFormat;
            ImageCodecInfo info = ImageCodecInfo.GetImageEncoders().SingleOrDefault(i => i.FormatID == format.Guid);
            EncoderParameter param = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
            EncoderParameters parameters = new EncoderParameters(1);
            parameters.Param[0] = param;
            img.Dispose();

            //保存已生成微缩图,这里将GIF格式转化成png格式。
            if (format == ImageFormat.Gif)
            {
                destPath = destPath.ToLower().Replace(".gif", ".png");
                bmp.Save(destPath, ImageFormat.Png);
            }
            else
            {
                if (info != null)
                {
                    bmp.Save(destPath, info, parameters);
                }
                else
                {

                    bmp.Save(destPath, format);
                }
            }

            img.Dispose();
            g.Dispose();
            bmp.Dispose();
        }

 

 

下面介绍ashx中AJAX调用方法,我们在AJAX异步上传图片成功后对源图片进行"PS"。关键代码片段如下:

 

//上传成功后网站内源图片相对路径
  string relativePath = System.Web.HttpContext.Current.Request.ApplicationPath 
                       + string.Format(@"Content/Upload/Images/{0}", fileName);

 /*
   比例处理
   微缩图高度(DefaultHeight属性值为 400)
 */
 System.Drawing.Image img = System.Drawing.Image.FromFile(toFile);
 int width = img.Width;
 int height = img.Height;
 float ratio = (float)width / height;

 //微缩图高度和宽度
  int newHeight = height <= DefaultHeight ? height : DefaultHeight;
 int newWidth = height <= DefaultHeight ? width : Convert.ToInt32(DefaultHeight * ratio);

 FileInfo generatedfile = new FileInfo(toFile);
 string newFileName = "Thumb_" + generatedfile.Name;
 string newFilePath = Path.Combine(generatedfile.DirectoryName, newFileName);

 PictureHandler.CreateThumbnailPicture(toFile, newFilePath, newWidth, newHeight);

 string thumbRelativePath = System.Web.HttpContext.Current.Request.ApplicationPath 
                       + string.Format(@"/Content/Upload/Images/{0}", newFileName);

 //返回原图和微缩图的网站相对路径
  relativePath = string.Format("{0},{1}", relativePath, thumbRelativePath);

 return relativePath;

 

demo 见附件http://dl2.iteye.com/upload/attachment/0109/2590/06f8f52b-f228-35c3-9391-6b43bd18e3d6.rar

 

 

分享到:
评论

相关推荐

    C#实现AJAX 上传文件,图片,音乐,

    本教程将重点讨论如何在C#环境下,通过AJAX技术实现文件,包括图片和音乐的上传功能。 首先,理解AJAX上传的基本原理。传统的文件上传通常涉及整个页面的刷新,而AJAX允许我们仅更新部分网页内容,提高用户体验。...

    c# ajax调用webapi上传图片、传值 demo

    通过以上步骤,我们可以实现C# Ajax调用WebAPI上传图片并传值的功能,同时结合图片相似度识别对比,为用户提供高效、流畅的交互体验。在实际开发中,还需要根据具体需求进行调整和优化,确保代码的健壮性和可扩展性...

    C#二维码生成Demo,生成图片证件Demo

    接下来是“C#生成图片证件Demo”。在现实生活中,证件照片是个人身份识别的重要组成部分,而在数字化时代,生成电子版的证件图片则需要编程技术来实现。在C#中,我们可以利用System.Drawing命名空间中的类,如Image...

    C#.NET生成普通二维码方法及生成带图片二维码方法源码Demo

    本文将详细介绍如何使用C#.NET实现这两种功能:生成普通二维码以及生成带有图片的二维码。 首先,生成普通二维码的基础步骤涉及使用第三方库,如ZXing.Net(Zebra Crossing的.NET版本)。ZXing是一个流行的开源库,...

    简单实现C# ajax demo

    在本C# Ajax Demo中,我们将探讨如何在C#后端与JavaScript前端之间实现异步通信,以提高用户体验。 首先,创建一个基于ASP.NET的Web应用程序项目。在Visual Studio中,选择"新建项目",然后在模板中找到"ASP.NET ...

    C# jquery ajax 预览并无刷新上传图片

    "C# jQuery AJAX 预览并无刷新上传图片"的主题涵盖了多项技术,旨在提供流畅、直观的用户体验。以下是对这些知识点的详细阐述: 1. **jQuery**:jQuery是一个强大的JavaScript库,它简化了HTML文档遍历、事件处理、...

    C#上传图片demo

    以上是关于“C#上传图片demo”涉及的主要技术点。这个demo提供了构建图片服务器的基本结构,开发者可以根据实际需求进行扩展,例如添加权限验证、图片预览、缩略图生成等功能。理解这些知识点后,你就能更好地实现和...

    c#二维码图片生成/解码,DEMO,完整代码

    - 压缩包可能包含一个简单的Windows Forms或控制台应用程序,演示如何在UI上显示生成的二维码图片,并处理用户上传的二维码图片进行解码。 9. **调试与测试**: - 开发者可以通过修改数据和解码结果来测试代码的...

    ASP.Net+C#+AJax+图片剪载上传

    在结合C#语言和AJAX技术后,可以创建高效、响应迅速的网页应用,尤其在处理图片剪裁和上传这类任务时,可以提供流畅的用户体验。 在"ASP.Net+C#+AJax+图片剪载上传"的场景中,我们主要讨论以下几个关键知识点: 1....

    c# 生成图片略微图,单张处理,批量处理,DEMO,完整代码

    本示例将详细介绍如何使用C#进行单张图片和批量图片的略微图生成,并提供DEMO代码供参考。 首先,我们需要引入必要的库,如System.Drawing命名空间,它包含了处理图像所需的类: ```csharp using System.Drawing; ...

    C#_GUID图片处理demo

    在本"C#_GUID图片处理demo"项目中,开发者运用了C#编程语言来实现了一系列的图片处理功能,包括但不限于转换图片为黑白效果和柔化处理。这些功能在图像处理领域有着广泛的应用,例如照片编辑、艺术创作以及图像分析...

    c#基于EPPlus导出生成Excel,DEMO,完整代码

    这个DEMO对于学习和理解如何在C#中使用EPPlus库来生成Excel文件非常有帮助,同时也方便了数据导出的需求,例如报表生成或数据备份。 总的来说,EPPlus是C#开发中处理Excel文件的强大工具,它简化了与Excel文件交互...

    c#图片上传及图片展示Demo

    这个"图片上传及图片展示Demo"项目旨在提供一个示例,帮助开发者理解如何在C#中实现这些功能。下面我们将详细探讨相关的知识点。 1. 文件流操作:在C#中,文件上传通常涉及读取和处理文件流。当用户选择一个图片...

    C# asp.net MVC 图片上传 多图片

    上传后,可能需要对图片进行缩略图生成、尺寸调整、质量优化等操作,以节省存储空间和提高加载速度。可以使用第三方库如ImageMagick或System.Drawing namespace进行图片处理。 9. **错误处理**: 必须妥善处理...

    C#二维码生成,显示完整demo

    这个"C#二维码生成完整demo"提供了一个完整的示例,包括二维码的生成和读取功能,同时也允许用户自定义二维码的大小、颜色以及清晰度等属性。下面将详细介绍这个项目中的关键知识点。 1. **二维码基本原理**: ...

    C#生成二维码demo.rar

    本项目“C#生成二维码demo”提供了一个基于C#语言的Windows Forms(WinForm)应用程序,用于演示如何在C#环境下创建和显示二维码。下面将详细介绍该项目中的关键知识点。 首先,C#是一种由微软开发的面向对象的编程...

    C#二维码图片生成,二维码图片解码含源代码

    C#二维码图片生成,二维码图片解码含源代码 比较适合初学和进阶学者,使用的是com.google.zxing.common库 将指定的文字或数字生成二维码图片 将生成的二维码图二内容进行解码成对应的文字或数字。 可进行设置图片的...

    C# winform使用zedgraph制作饼图条形图和折线图的demo

    在C# WinForm开发中,可视化数据展示是一个重要的部分,特别是在数据分析、监控或者报告生成的场景下。ZedGraph库为开发者提供了一种强大的工具,用于创建各种图表,包括饼图、条形图和折线图。这个"C# winform使用...

    完整C#ajax简单实现实例

    C#与Ajax的结合在现代Web开发中扮演着重要角色,尤其在构建动态、无刷新的用户界面时。Ajax(Asynchronous JavaScript and XML)技术允许前端与后台进行异步通信,提高了网页的交互性和用户体验。在这个"完整C# Ajax...

Global site tag (gtag.js) - Google Analytics