web app 开发之图片压缩
来源:互联网 发布:淘宝脐橙店招图片大全 编辑:程序博客网 时间:2024/05/22 08:15
web app开发中会有很多图片上传的应用场景,而现在的图片很多是由手机拍摄的,随着手机像素的增大,现在一般手机拍摄的图片都是几M的大小,如果直接上传,在网速差的情况下上传时间是个很大的问题,而且用户在查看时一个页面就加载好多张几M大小的图片,而现在的流量资费相对不那么便宜。对于用户清晰度要求不那么高的图片,我们应该要提供压缩功能,这才能对用户更加友好。
图片压缩,我采用的是HTML5中的canvas(画布)功能,这个功能的具体用法可以从w3csool中学习,链接在下http://www.w3school.com.cn/html5/html_5_canvas.asp
在上一篇博文中,我写了一个图片上传预览的HTML,我们可以直接修改那次的代码就好了。
因为用户有时就是想用原来的图片,所以我们添加radio标签,提供“原图”和“压缩图”的选项供用户选择。
话不多说,上代码!
这是html部分的代码,所得到的显示效果是这样的:
下面来看看JS部分的代码:
如何获得上传图片的url在上篇博文中已经讲过这里就不赘述了,这里主要的思路就是将上传的图片放到一个隐藏的div中,根据用户选择“原图”还是“压缩图”在图片预览的
div中进行显示。
显示原图就直接把获得的原图url给到预览图img标签的src就可以了,我们来说说压缩图部分。
绘制压缩图封装在drawCompressionPicture这个函数中,
var preview_canvas = document.getElementById("previewCanvas");
var preview_ctx = preview_canvas.getContext("2d");
这两句是找到id为previewCanvas的画布,并对这个画布生成一支名为preview_ctx的画笔。
最关键的就是preview_ctx.drawImage(image, 0, 0, 260, height);这条语句,它的意思是将image这个图像画到画布中,并确定画的起点和长宽,这里我是以0,0为其始,也就是这个画布的左上角顶点开始画,宽为260,高为height,这里var height = image.height / (image.width / 260);就保证了画出的图它的长宽比是没有变的,图片就不会变形。
下面我们来看看效果:
原图:
压缩图:
我们把两张图片保存下来看看图片大小:
可以看出图片压缩了1/3,各位可以自行调节preview_ctx.drawImage(image, 0, 0, 260, height)的参数得到自己想要的尺寸和压缩比,这也是得到统一尺寸图片的一种方法。
最后,得到了压缩图如何上传到服务器呢,我们用
var image_data = preview_canvas.toDataURL("image/png");
这条语句可以得到画布中图片的编码,我们用alert(image_data);可以看得编码:
这并不是标准的二进制编码,而是base64编码,这个上传到服务器中可以用相应的base64解码得到二进制文件存到数据库中,也可以转成图片存在文件夹中。
我是用python写后台,插入的库为:
import base64
用image = base64.b64decode(image_data)语句就可以得到相应的二进制数据了,其它语言的后台也有相应的方法,大家自行谷歌了~
接下来的博文可能会和大家分享下图片如何存到数据库中,一起学习,欢迎拍砖~
- web app 开发之图片压缩
- web app开发之图片上传预览
- Hbuilder app开发之app启动图片
- iOS开发之压缩,上传图片
- (0031) iOS 开发之图片压缩
- Android开发之---有关图片压缩
- VSWeb开发之[Web Essentials 压缩js]
- web开发之图片选择
- Hbuider hybrid app 开发之上传图片
- iOS开发之根据图片宽高等比例压缩图片
- web app 笑忘书 之开发(一)
- web app 笑忘书 之开发(二)
- web app 笑忘书 之开发(三)
- web前端之HTML5压缩图片compress image with canvas
- 手机开发之Web App和Native App 谁将是未来
- Android开发压缩图片
- iOS开发-图片压缩
- [IOS开发]图片压缩
- 设置最佳线程数总结
- 第16章 增加日志功能
- 特殊json的两种手动读取的方式
- SQL - 脚本Tips
- Eclipse中web项目部署至Tomcat步骤
- web app 开发之图片压缩
- nginx url分发 特别说明
- PL/SQL DEVELOPER 使用的一些技巧
- UITextView
- 值得推荐的C/C++框架和库
- When and how to use a ThreadLocal
- 网页浏览毫秒必争,超强前端网页性能总结
- 第17章 小结
- 计算机底层知识拾遗(七)页缓存数据同步和页回收机制