`

ASP图片缩放编程

    博客分类:
  • C#
阅读更多
今天觉得首页出来的图片太慢了,所以着手改图片大小的问题

查看了一下原因,问题出在产品的缩略图上,以前是直接用<img src=XXX.jpg  width=190 height=140>这样缩放的,其实它还是把原图下载到了本地,原图有多少大就下载多少大.而主页要显示4个图片,每个原图都有600K就要2.4M,是够大的了.

于是考虑怎么样显示缩略图.

起先开始想把上传的时候就生成缩略图,但是,现在是asp,有难度的,网上找了好久没有攻略,都说要组件才能做到,而我的服务器没有组件.这条路不通.

然后考虑是否能上传两次,一次原图,一次在本地生成缩略图再上传.想用Flex,上传原图的代码是找到了,也很简单.可是本地弄个缩略再上传,我这个初学者就不会了,似乎要用到ImageData,再Matrix什么的,一下子研究不出来.

最后没办法了.上服务器研究一下,我记得是可以用.net 1.1的,下载了一个asp.net探针,果然服务器用的是windows2003, .net 1.1,那就好办了,做一个server端的缩放就完工了.



最后showimage.aspx代码如下:
<%

try
    {
        string input_ImgUrl = "../pic/" + Request.QueryString["name"];

        // ===通过连接创建Image对象===
        System.Drawing.Image oldimage = System.Drawing.Image.FromFile(Server.MapPath(input_ImgUrl));
        int int_Width = oldimage.Width;
        int int_Height = oldimage.Height;

        // ===上传标准图大小===
        int int_Standard_Width = Convert.ToInt32(Request.QueryString["width"]);
        int int_Standard_Height = Convert.ToInt32(Request.QueryString["height"]);

        int Reduce_Width = 0; // 缩小的宽度
        int Reduce_Height = 0; // 缩小的高度
        int level = 100; //缩略图的质量 1-100的范围

        // ===获得缩小,裁剪大小===
        double scaleHeight = ((double)int_Standard_Height / (double)int_Height);
        double scaleWidth = ((double)int_Standard_Width / (double)int_Width);

        if (scaleHeight < scaleWidth)
        {
            Reduce_Width = (int)(int_Width * scaleHeight);
            Reduce_Height = int_Standard_Height;
        }
        else if (scaleHeight > scaleWidth)
        {
            Reduce_Width = int_Standard_Width;
            Reduce_Height = (int)(int_Height * scaleWidth);
        }
        else
        {
            Reduce_Width = int_Standard_Width;
            Reduce_Height = int_Standard_Height;
        }


        // ===缩小图片===
        System.Drawing.Image thumbnailImage = oldimage.GetThumbnailImage(Reduce_Width, Reduce_Height, null, IntPtr.Zero);
        System.Drawing.Bitmap bm = new System.Drawing.Bitmap(thumbnailImage);

        // ===处理JPG质量的函数===
        System.Drawing.Imaging.ImageCodecInfo[] codecs = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
        System.Drawing.Imaging.ImageCodecInfo ici = null;
        foreach (System.Drawing.Imaging.ImageCodecInfo codec in codecs)
        {
            if (codec.MimeType == "image/jpeg")
                ici = codec;
        }
        System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters();
        ep.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)level);

        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        bm.Save(ms, ici, ep);
        Response.ClearContent();
        Response.BinaryWrite(ms.ToArray());
        Response.ContentType = "image/jpeg";//指定输出格式为图形

        Response.Flush();
    }
    catch (Exception e)
    {
        Response.Write(e.ToString());
    }

%>





中间过程中,用到的Flex文件上传代码:
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
 layout="vertical" verticalAlign="middle" horizontalAlign="center">

 <mx:Style>
  global {
   fontSize : 14;
  }
 </mx:Style>
 
 <mx:Script>
  <![CDATA[
   import mx.effects.Zoom;
   import mx.controls.Image;
   // 先搞 1 个 FileReference
   private var file:FileReference = new FileReference();
   
   // 上传状态指示, 和下面的文本框绑定
   [Bindable]
   private var stateText:String = "请选择一个文件上传";
   
   // createChildren 比 creationComplete 事件更早发生, 省的注册事件侦听, 直接在这里写了
   protected override function createChildren():void {
    super.createChildren();
    file.addEventListener(Event.SELECT, file_select);
    file.addEventListener(Event.COMPLETE, file_complete);
    file.addEventListener(ProgressEvent.PROGRESS, file_progress);
   }
   
   // 选择 1 个文件的事件
   private function file_select (e:Event):void {
    stateText = "选择了文件 " + file.name;
   }
   
   // 上传完毕后的事件
   private function file_complete (e:Event):void {
    stateText = "上传完毕";
   }
   
   private function file_progress (e:ProgressEvent):void {
    stateText = "已上传 " + Math.round(100 * e.bytesLoaded / e.bytesTotal) + "%";
   }
   // 先判断一下文件大小, 再上传, FileService.aspx 就是上传地址
   private function upload ():void {
    if (file.size > 0) {
     stateText = "正在上传 " + file.name;
     var request:URLRequest = new URLRequest("FileService.asp");
     file.upload(request);
     
    }
   }
   
   
  ]]>
 </mx:Script>
 
 <mx:Panel width="250" height="112" layout="vertical" title="上传示例"
  verticalAlign="middle" horizontalAlign="center" >
  <mx:HBox>
   <mx:TextInput text="{stateText}" width="160" editable="false"/>
   <mx:Button label="浏览" click="file.browse();"/>
  </mx:HBox>
  <mx:HBox>
   <mx:Button label="上传" click="upload();"/>
  </mx:HBox>
 </mx:Panel>
</mx:Application>

其中,FileService.asp使用了无组件上传技术,其实也可以用FileService.aspx来代替,只要一般的网页上的file能上传就可以.

原文:http://www.cnblogs.com/huqingyu/archive/2009/05/27/1490516.html
分享到:
评论

相关推荐

    javascript+asp图片缩放剪切

    javascript+asp图片缩放剪切(也可以用其他编程如asp,php,jsp),最好的用处是上传图片可以用到。

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 &lt;br&gt;1.1 Visual Studio开发环境安装与配置 2 &lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2 &lt;br&gt;0002 配置合适的Visual Studio 2005...

    asp学校网站管理系统

    完美的ASP编程的学校网站源码,后台功能非常强大,并参考目前众多流行的国内国外学校网站模板重新做了美化,非常漂亮的学校网站模板,适用于各学校网站建设的网站源码,学校网站管理系统,学校事业单位网站管理系统,Asp+...

    优道PDF控件 ASP代码示例

    各种语言支持 服务器端支持Windows及Linux的服务器,支持各种编程语言,例如asp,asp.net,php,java,c#,vb,vb.net,,delphi,c++,python,ruby等 ;国际权威认证 软件经过国际权威机构安全数字签名认证,通过多种环境及...

    免费版.NET Excel组件_Free Spire.XLS for .NET 8.3

    这个专业的 .NET Excel 类库嵌入了很多灵活显示工作表的选项,包括分页符,缩放设置,冻结窗口,页眉/页脚,打印 Excel 文件,打印页面尺寸和打印区域等。 5.在运行时轻松操作单元格和 Excel 计算引擎。开发人员可以...

    大型学校网站源码学校网页模板正式版

    完美的ASP编程的学校网站源码,后台功能非常强大,并参考目前众多流行的国内国外学校网站模板重新做了美化,非常漂亮的学校网站模板,适用于各学校网站建设的网站源码,学校网站管理系统,学校事业单位网站管理系统,Asp+...

    Grid++Report6.0

    1、设计面板具有缩放设计功能。 2、将关联属性归类为组,方便在设计时集中设置与查看。 3、对象浏览窗口与属性窗口可以隐藏,方便在设计很宽的报表时增大设计面板的区域。 4、设计面板大小跟随明细网格总列宽来改变...

    大型学校教育类网站源码,测试完整!

    完美的ASP编程的学校网站源码,后台功能非常强大,并参考目前众多流行的国内国外学校网站模板重新做了美化,非常漂亮的学校网站模板,适用于各学校网站建设的网站源码,学校网站管理系统,学校事业单位网站管理系统,Asp+...

    完美学校网站系统全站源代码学校网站模板下载

    完美的ASP编程的学校网站源码,后台功能非常强大,并参考目前众多流行的国内国外学校网站模板重新做了美化,非常漂亮的学校网站模板,适用于各学校网站建设的网站源码,学校网站管理系统,学校事业单位网站管理系统,Asp...

    各级教学教育学校网站源码下载

    完美的ASP编程的学校网站源码,后台功能非常强大,并参考目前众多流行的国内国外学校网站模板重新做了美化,非常漂亮的学校网站模板,适用于各学校网站建设的网站源码,学校网站管理系统,学校事业单位网站管理系统,Asp...

    vc++ 开发实例源码包

    内含(重启、图片操作、ip操作、键盘与鼠标、客户端以及服务端、文件传输等实例源码) 多个VC++加密解密算法库(CRYPT++) 详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加...

    Microdraw图形控件开发版本-试用版

    编程语言:Viusal Basic/Viusal C++/Delphi/ASP/IE/Powerbuild/Viusal Foxpro/C++ Builder/.NET(vb.net c# vc.net)/易语言 文件管理功能: 1. 支持的文件格式包括:BMP、GIF、ICO、TGA、PCX、WBMP、WMF、JPEG、...

    vcg(验证码控件)

    功能介绍:  为网页编程人员提供能够自动生成验证码图像并验证网页访问者输入的Web控件,具体功能如下: 1. 提供简单易用的设计时所见即所得的可视化设置方式,并且支持设计时验证码图像效果与特效属性设置...

    C#源码大集合 02(共3卷)

    │ │ └─实例99 如何以任意比例缩放显示图像 │ ├─第6章 数据库开发 │ │ ├─实例113 如何读写Access数据库 │ │ ├─实例114 如何查询Access数据库 │ │ ├─实例115 如何创建SQL Server数据库 │ │ ├─...

    C#源码大集合 01(共3卷)

    │ └─第31讲 拖拉练习 │ ├─第05部分 ASP.NET │ │ ├─第36讲 在线投票 │ │ ├─第37讲 论坛 │ │ └─第三十三讲 绕过ASP.NET │ ├─第06部分 移动电话上网 │ │ ├─第四十一讲 手机...

    C#源码大集合 03(共3卷)

    │ └─第31讲 拖拉练习 │ ├─第05部分 ASP.NET │ │ ├─第36讲 在线投票 │ │ ├─第37讲 论坛 │ │ └─第三十三讲 绕过ASP.NET │ ├─第06部分 移动电话上网 │ │ ├─第四十一讲 手机...

Global site tag (gtag.js) - Google Analytics