图片压缩后上传!Flash图片极速上传!提供参数控制!
需求
如果用户使用数码相机照的照片一般都会在很大!(2M~5M)
一般网站都会在用户上传照片后对照片进行适当压缩,以提高网页浏览时照片的加载速度。
如果可以在客户端对照片压缩后上传,可以节省带宽,并且也减轻服务器压力。会有很好的用户体验!以前实现这样的功能都需要借助上传组件!
其实使用Flash 10.0就可以实现照片压缩后上传。
原理
- 首先使用Flash的上传功能让用户选择要上传的照片。
- 加载选择照片的数据到Flash中。(此功能需要Flash10.0以上版本)
- 将数据加载到Flash的image组件中。
- 将image按照合适大小进行缩放。
- 在对image的显示区域进行Flash截图存入Bitmap。
- 将Bitmap转换为Jpg格式数据。
- 使用post方式将Jpg数据发送到服务器端!
调用方法
01 |
<!DOCTYPE html> |
02 |
< html > |
03 |
< head > |
04 |
< title >图片压缩上传</ title > |
05 |
< script type = "text/javascript" src = "swfobject.js" ></ script > |
06 |
</ head > |
07 |
< body onload = "showFlash();" > |
08 |
|
09 |
< div id = "divFlash" > |
10 |
加载中... |
11 |
</ div > |
12 |
< script type = "text/javascript" > |
13 |
function showFlash() { |
14 |
var params = { |
15 |
serverUrl: "saveImage.aspx", |
16 |
jsFunction: "flashReturn", |
17 |
imgWidth:500, |
18 |
imgHeight:500, |
19 |
imgQuality:80, |
20 |
btnText:'图 片' |
21 |
} |
22 |
swfobject.embedSWF("imgZipUpload.swf", "divFlash", "100", "30", "10.0.0", "expressInstall.swf", params); |
23 |
} |
24 |
|
25 |
function flashReturn(type, str) { |
26 |
if(type == 'error') |
27 |
{ |
28 |
alert(str); |
29 |
} |
30 |
else if (type == 'complete') |
31 |
{ |
32 |
var img1 = document.getElementById('img1'); |
33 |
img1.style.display = "block"; |
34 |
img1.src = str; |
35 |
} |
36 |
} |
37 |
</ script > |
38 |
< img id = "img1" style = "display:none;" /> |
39 |
</ body > |
40 |
</ html > |
Flash参数说明
参数 | 名称 | 是否必填 | 默认值 | 取值范围 |
---|---|---|---|---|
serverUrl | 服务器端响应地址 | 必填项 | ||
imgWidth | 图片缩放宽度 | 选填 | 100 | 10-2000 |
imgHeight | 图片缩放高度 | 选填 | 100 | 10-2000 |
imgQuality | 图片质量 | 选填 | 80 | 1-100 |
jsFunction | 回调JS函数 | 选填 | ||
btnText | 上传按钮文字 | 选填 | 上 传 |
说明:
- 用户上传照片会等比压缩在指定范围内。
- 但当用户照片尺寸必需要缩放尺寸小时,不对用户照片进行缩放。
- 上传时只支持上传jpg或bmp格式图片。因为png或gif如果是透明的在压缩后会变得不透明,所以不支持png或gif图片上传。
- imgQuality 图片质量数值越大质量越高,但文件也会越大。
- jsFunction 回调JS函数参数type,str type 当为error时,str为错误信息 当为complete,str为服务器端返回值
- Flash中的按钮必须用户手动点击后才会弹出选择文件框!
服务器端页面(Asp.net)
- Request.InputStream 压缩后的jpg文件流
- Request.Headers["fileName"] 用户图片名称
- Request.Headers["width"] 压缩后宽度
- Request.Headers["height"] 压缩后高度
- Response.Write(""); 上传成功返回数据
实例及源码下载:https://files.cnblogs.com/zjfree/imgZipUpload.rar
欢迎转载,转载请注明:转载自[ http://www.cnblogs.com/zjfree/ ]
5
0
优雅地使用 C++ 制作表格:tabulate
编写 Django 应用单元测试
Django Haystack 全文检索与关键词高亮
JAVA格物致知开篇:凡事预则立不预则废
前端见微知著流程篇:前端开发流程总结
前端见微知著工具篇:Bower组件管控
前端见微知著工具篇:Grunt实现自动化
前端见微知著AngularJS备忘篇:温故而知新,可以为师矣
前端见微知著JavaScript基础篇:this or that ?
- 最新文章
-
【webpack】-- 样式加载
【webpack】-- 模块热替换
H5缓存-Manifest
【webpack】-- 自动刷新与解析
【webpack】-- 入门与解析
【读书笔记】-- JavaScript模块
【微信开发】-- 企业转账到用户
【微信开发】-- 公众号支付
求一个等差数列
测试报告模板范例
- 热门文章
-
解决CentOS下无法发送邮件的问题
解决:Failure to transfer org.apache.maven.plugins:maven-jar-plugin:pom:2.4 from错误
IntelliJ
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
centos6默认python2.6升级2.7 卸载python2.6升级2.7
如何让Fiddler可以抓取https的请求
fiddler抓取https请求(android/ios)
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
mysql生成不重复随机数(unique number generation)
Django 博客单元测试:测试评论应用