缩略图制作(能运行,但缩略图生成的有问题,待改进)

首先是前台代码:

1 <asp:FileUpload ID="FileUpload1" runat="server" />
2 <asp:Button ID="Button1" runat="server" Text="上传" OnClick ="Button1_Click"/>

然后是上传按钮的单击事件(其中上传文件的文件夹,要存在):

1 protected void Button1_Click(object sender, EventArgs e)
2 {
3     string a = this.UpLoadImage(this.FileUpload1, "UpLoad/", "thumb_", 200, 100);
4 }

然后是生成缩略图方法(此方法转自:http://blog.csdn.net/ojekleen/article/details/2754255):

  1 /// <summary>
  2 /// asp.net上传图片并生成缩略图
  3 /// </summary>
  4 /// <param name="upImage">HtmlInputFile控件</param>
  5 /// <param name="sSavePath">保存的路径,些为相对服务器路径的下的文件夹</param>
  6 /// <param name="sThumbExtension">缩略图的thumb</param>
  7 /// <param name="intThumbWidth">生成缩略图的宽度</param>
  8 /// <param name="intThumbHeight">生成缩略图的高度</param>
  9 /// <returns>缩略图名称</returns>
 10 public string UpLoadImage(FileUpload upImage, string sSavePath, string sThumbExtension, int intThumbWidth, int intThumbHeight)
 11 {
 12     string sThumbFile = "";
 13     string sFilename = "";
 14     if (upImage.PostedFile != null)
 15     {
 16         HttpPostedFile myFile = upImage.PostedFile;
 17         int nFileLen = myFile.ContentLength;
 18         if (nFileLen == 0)
 19             return "没有选择上传图片";
 20         //获取upImage选择文件的扩展名
 21         string extendName = System.IO.Path.GetExtension(myFile.FileName).ToLower();
 22         //判断是否为图片格式
 23         if (extendName != ".jpg" && extendName != ".jpge" && extendName != ".gif" && extendName != ".bmp" && extendName != ".png")
 24             return "图片格式不正确";
 25
 26         byte[] myData = new Byte[nFileLen];
 27         myFile.InputStream.Read(myData, 0, nFileLen);
 28         sFilename = System.IO.Path.GetFileName(myFile.FileName);
 29         int file_append = 0;
 30         //检查当前文件夹下是否有同名图片,有则在文件名+1
 31         while (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))
 32         {
 33             file_append++;
 34             sFilename = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName)
 35                 + file_append.ToString() + extendName;
 36         }
 37         System.IO.FileStream newFile
 38             = new System.IO.FileStream(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename),
 39             System.IO.FileMode.Create, System.IO.FileAccess.Write);
 40         newFile.Write(myData, 0, myData.Length);
 41         newFile.Close();
 42         //以上为上传原图
 43         try
 44         {
 45             //原图加载
 46             using (System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))
 47             {
 48                 //原图宽度和高度
 49                 int width = sourceImage.Width;
 50                 int height = sourceImage.Height;
 51                 int smallWidth;
 52                 int smallHeight;
 53                 //获取第一张绘制图的大小,(比较 原图的宽/缩略图的宽  和 原图的高/缩略图的高)
 54                 if (((decimal)width) / height <= ((decimal)intThumbWidth) / intThumbHeight)
 55                 {
 56                     smallWidth = intThumbWidth;
 57                     smallHeight = intThumbWidth * height / width;
 58                 }
 59                 else
 60                 {
 61                     smallWidth = intThumbHeight * width / height;
 62                     smallHeight = intThumbHeight;
 63                 }
 64                 //判断缩略图在当前文件夹下是否同名称文件存在
 65                 file_append = 0;
 66                 sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) + extendName;
 67                 while (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sThumbFile)))
 68                 {
 69                     file_append++;
 70                     sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) +
 71                         file_append.ToString() + extendName;
 72                 }
 73                 //缩略图保存的绝对路径
 74                 string smallImagePath = System.Web.HttpContext.Current.Server.MapPath(sSavePath) + sThumbFile;
 75                 //新建一个图板,以最小等比例压缩大小绘制原图
 76                 using (System.Drawing.Image bitmap = new System.Drawing.Bitmap(smallWidth, smallHeight))
 77                 {
 78                     //绘制中间图
 79                     using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))
 80                     {
 81                         //高清,平滑
 82                         g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
 83                         g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
 84                         g.Clear(Color.Black);
 85                         g.DrawImage(
 86                         sourceImage,
 87                         new System.Drawing.Rectangle(0, 0, smallWidth, smallHeight),
 88                         new System.Drawing.Rectangle(0, 0, width, height),
 89                         System.Drawing.GraphicsUnit.Pixel
 90                         );
 91                     }
 92                     //新建一个图板,以缩略图大小绘制中间图
 93                     using (System.Drawing.Image bitmap1 = new System.Drawing.Bitmap(intThumbWidth, intThumbHeight))
 94                     {
 95                         //绘制缩略图
 96                         using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap1))
 97                         {
 98                             //高清,平滑
 99                             g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
100                             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
101                             g.Clear(Color.Black);
102                             int lwidth = (smallWidth - intThumbWidth) / 2;
103                             int bheight = (smallHeight - intThumbHeight) / 2;
104                             g.DrawImage(bitmap, new Rectangle(0, 0, intThumbWidth, intThumbHeight), lwidth, bheight, intThumbWidth, intThumbHeight, GraphicsUnit.Pixel);
105                             g.Dispose();
106                             bitmap1.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
107                         }
108                     }
109                 }
110             }
111         }
112         catch
113         {
114             //出错则删除
115             System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename));
116             return "图片格式不正确";
117         }
118         //返回缩略图名称
119         return sThumbFile;
120     }
121     return "没有选择图片";
122 }

运行效果:

最终上传(文件夹要已经存在):

以上就是缩略图的制作。

时间: 2024-10-15 12:20:42

缩略图制作(能运行,但缩略图生成的有问题,待改进)的相关文章

C# 通过ASHX保存上传的图片并制作高质量的缩略图的代码

如下的内容段是关于C# 通过ASHX保存上传的图片并制作高质量的缩略图的内容,应该能对小伙伴也有帮助. <%@ WebHandler Language="C#" Class="UploadFile" Debug="true" %> using System; using System.Web; public class UploadFile : IHttpHandler { public void Proce***equest(Htt

浏览器客户端智能自动化:如何取得页面中JavaScript运行时动态生成的URL?

浏览器客户端智能自动化:如何取得页面中JavaScript运行时动态生成的URL? 需求 "页面智能拼接"指的是通过启发式查询DOM树,判断出"下一页"链接,取出其href属性.Chromium的官方插件DOM Distiller完成类似的工作,主要目的就是为了将多页点击流程变成单页的Ajax连续阅读体验. 问题是,现在有些网站为了阻止浏览器客户端这么做,将href属性设置为"#"(或javascript:void()),然后在其onclick事

【PHP缩略图类】手机照片不能生成缩略图问题以及解决方案

[本文原创,谢绝转载] 一.出现的问题 这几天做了手机上传照片并裁出缩略图的接口的测试,发现不管怎么,生成的缩略图都是一片漆黑.:-( 然后就把这个缩略图类单拿出来进行测试,发现只要是手机拍出来的照片都不能进行缩略图的处理.... 二.问题分析以及解决方案 经过群里的请教,发现问题可能是出现在文件的类型的判断上,因为png图片自带一个透明的图层,导致不能直接转换成jpg的文件,而手机排出的照片扩展名是jpg. 所以,得出的结论是手机拍出的是jpg扩展名的png图片. 由于扩展名是可以随意修改的,

C#图片处理,缩略图制作

准备参数:图片文件流.文件名 方法:1.先将图片流通过System.Drawing.Image.FromStream方法转成图片对象 2.通过图片对象.GetThumbnailImage方法生成自定义长宽的缩略图. 生成方法: 缩略图生成: /// <summary> /// 缩略图 /// shidd /// </summary> /// <param name="myStream">文件流</param> /// <param

python中unittest单元测试框架-加载测试用例、运行测试用例、生成测试报告

unittest中加载测试用例的方法很多,这里先介绍addTest中添加用例-测试类的实例的方式: import os import unittest # 创建suite对象 suite = unittest.TestSuite() # 第一种方法:一个一个添加用例 from class1228_unittest_loader.test_cases.test_setup import * # 添加测试用例到suite套件里面:用例-测试类的实例 suite.addTest(TestSetUp('

利用JS函数制作时钟运行程序

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>时钟</title> <script type="text/javascript"> function toDouble(num)//不满两位,空位补零 { if(num<10) { return '0'+num;//一

用JDK制作可能运行的JAR

一.前言 JAVA JAVAC JAR的一些参数 二.JAVA 文件 三.具体操作 1. 编译JAVA文件,本示例路径 C:\Users\victor.min\Desktop\printFileName\PrintChoseFileName.java cd C:\Users\victor.min\Desktop\printFileName javac *.java 这时在C:\Users\victor.min\Desktop\printFileName 路径下会多出一些 class文件 2.创建

批处理运行Vstest并生成HTML报告

本文介绍一下在没有安装Visual Studio的机器上通过批处理执行单元测试并通过Trx2html生成HTML报告的批处理脚本. 大致思路: 1. 拷贝Vstest.console工具包 TestWindows 到程序执行目录. 2. 拷贝 XML报告 *.trx 转 HTML报告的工具包 trx2html到程序执行目录. 3. 把旧的测试报告归档到 OldResult目录. 4. vstest.console生成的报告放在TestResults目录. 5. 把TestResults中所有tr

在TQ2440上运行perf,生成Flame Graph

参考 http://www.cnblogs.com/helloworldtoyou/p/5585152.html http://blog.csdn.net/mtofum/article/details/44108601 平台 TQ2440 Linux-4.10.17 概述 Perf是Linux kernel自带的系统性能优化工具.Perf在Linux源码中的位置是linux-4.10.17/tools/perf,编译perf之前需要先交叉编译zlib和elfutils. 正文 1.交叉编译zli