jquery+html5+canvas实现图片 预览 压缩 上传
javascirpt(function($){
$.fn.extend({
aiiUpload:function(obj)
{
if(typeof obj !="object")
{
alert('参数错误');
return;
}
var imageWidth,imageHeight;
var base64;
var file_num=0;
var fileInput=$(this);
var fileInputId=fileInput.attr('id');
createDoc('#'+fileInputId,obj.method,obj.action);
$('#aii_file').change(function(){
if(test(this.value)==false)
{
alert('格式错误');
return;
}
var objUrl = getObjectURL(this.files[0]);
if (objUrl)
{
imgBefore(objUrl,file_num);
render(objUrl,obj.max_h,obj.max_w,file_num);
file_num++;
}
});
}
});
function createDoc(objID,form_method,form_action)
{
var element=$(objID);
element.append('<ul class="viewList"></ul>').append('<div class="fileBox"><input type="file" id="aii_file" /><div class="file_bg"></div></div>').append('<form id="aii_upload_form" method="'+form_method+'" action="'+form_action+'"></form>').append('<canvas id="canvas"></canvas>');
}
function test(value)
{
var regexp=new RegExp("(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png)$",'g');
return regexp.test(value);
}
function render(src,MaximgW,MaximgH,idnum)
{
var image=new Image();
image.onload=function()
{
var canvas=document.getElementById('canvas');
if(image.width>image.height)
{
imageWidth=MaximgW;
imageHeight=MaximgH*(image.height/image.width);
}
else if(image.width<image.height)
{
imageHeight=MaximgH;
imageWidth=MaximgW*(image.width/image.height);
}
else
{
imageWidth=MaximgW;
imageHeight=MaximgH;
}
canvas.width=imageWidth;
canvas.height=imageHeight;
var con=canvas.getContext('2d');
con.clearRect(0,0,canvas.width,canvas.height);
con.drawImage(image,0,0,imageWidth,imageHeight);
base64=canvas.toDataURL('image/jpeg',0.5).substr(22);
add_doc(base64,idnum);
}
image.src=src;
};
//建立一個可存取到該file的url
function getObjectURL(file) {
var url = null ;
if (window.createObjectURL!=undefined) { // basic
url = window.createObjectURL(file) ;
} else if (window.URL!=undefined) { // mozilla(firefox)
url = window.URL.createObjectURL(file) ;
} else if (window.webkitURL!=undefined) { // webkit or chrome
url = window.webkitURL.createObjectURL(file) ;
}
return url ;
}
//预览
function imgBefore(objUrl,idnum)
{
var li='<li class="view"><img src="'+objUrl+'" id="aiiImg_'+idnum+'" idnum="'+idnum+'" /><div class="close" onclick="img_remove(this);"></div></li>'
$('.viewList').append(li);
var img=$('#aiiImg_'+idnum);
//预览图片居中 填满 代码
console.log('asdfasdfasdf'); img.load(function(){
var imgw=img.width(),
imgh=img.height();
console.log(imgw);
console.log(imgh);
if(imgw>imgh)
{
img.css('height','100%');
img.css('width','auto');
img.css('marginLeft',-(img.width()-img.height())/2+'px');
}
else if(imgw<imgh)
{
img.css('width','100%');
img.css('height','auto');
img.css('marginTop',-(img.height()-img.width())/2+'px');
}
});
} function add_doc (base,idnum)
{
$('#aii_upload_form').append('<input type="hidden" name="img[]" id="f_'+idnum+'" value="'+base+'"/>');
}
})(jQuery);
function img_remove(element)
{
var num=$(element).prev().attr('idnum');
$(element).parent().remove();
$('#f_'+num).remove();
console.log('asdf');
}
html
<section class="section">
<div id="box"></div>
<p style="color:red;">*样式修改请参考aiiUpload.css</p>
</section>
javascript<script type="text/javascript">
$('#box').aiiUpload({
method:'POST',
action:'form.php',
max_h:300,
max_w:300,
subText:'上传图片',
fileText:'选择图片'
});
</script>
jquery+html5+canvas实现图片 预览 压缩 上传的更多相关文章
- 原生js实现图片预览并上传
最近主导的PC客户端网站重构工程告一段落,下一阶段开始给公司APP开发H5页面,技术栈是react.最近碰到一个需求:需要在H5页面上添加身份证照片,预览并上传.因为要兼容安卓4.4以下版本的手机,所 ...
- 基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现
前言 图片上传是web项目常见的需求,我基于之前的博客的代码(请戳:formData批量上传的多种实现)里的第三种方法实现多图片的预览.上传,并且支持三种方式添加图片到上传列表:选择图片.复制粘贴图片 ...
- H5-FileReader实现图片预览&Ajax上传文件
图片预览 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- 前端图片预览,上传前预览,兼容IE7、8、9、10、11,Firefox,Chrome(学习到的知识)
文章地址:http://www.cnblogs.com/rubylouvre/p/4597344.html 一.window.URL 在Chrome中,window.URL和window.webkit ...
- vue组件利用formdata图片预览以及上传《转载》
转载修改 在项目中直接新建一个单文件页,复制一下代码即可 upload组件: <template> <div class="vue-uploader" ...
- vue组件利用formdata图片预览以及上传
转载修改 在项目中直接新建一个单文件页,复制一下代码即可 upload组件: <template> <div class="vue-uploader" ...
- 用js实现预览待上传的本地图片
js实现预览待上传的本地图片,代码如下: <form name="form5" id="form5" method="post" ac ...
- 使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe)
使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe) 原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax,把图片的base64编码 ...
- 使用html5 FileReader获取图片,并异步上传到server(不使用iframe)
使用html5 FileReader获取图片,并异步上传到server(不使用iframe) 原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax.把图片的base64编 ...
随机推荐
- LeetCode-019-删除链表的倒数第 N 个结点
删除链表的倒数第 N 个结点 题目描述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 示例说明请见LeetCode官网. 来源:力扣(Leet ...
- c# 反射实现模型深拷贝
1.支持属性,不支持字段,支持复杂类型属性 2.泛型集合类支持List<T>与Dictionary<TKey,TValue> 3.如果发现有什么问题,希望大家可以多多指教 // ...
- Laravel-Auth认证
1.建立数据表 admins 2.找到config下的auth.php 文件,加入如下代码 <?php return [ /* |-------------------------------- ...
- es-kibana基本使用
- Docker 部署xxl-job 报错:xxl-rpc remoting error(connect timed out), for url : xxxxxx
使用Docker 部署的xxl-job,当调度中心和执行器部署在不同的容器内,此时xxl-job调用执行器的服务就会报: address:http://172.0.0.1:8841/ code:500 ...
- linux下编译安装php5.6出现 configure: error: Cannot find MySQL header files under /usr/local/mysql.
#yum install gcc gcc-c++ libxml2 libxml2-devel libjpeg-devel libpng-devel freetype-devel openssl-dev ...
- VS2010 查看代码编辑器中的变量
查看变量的使用情况 1.选中代码中的变量 2.右键 Find Usages
- 【Jenkins】基于Windows系统安装Jenkins
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 一.Jenkins简介 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种 ...
- 配置 conda 镜像环境
镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 环境: conda/4.11.0 CPython/3.8.8 Windows/10 镜像源选用阿里云镜像站anaconda镜像:https:// ...
- 手把手带你使用ZigBee——通过爱智控制EFR32,以及 Simplicity Studio 使用过程中注意事项
前言 兄弟们,我发现一个有意思的东西,我在爱智官网翻资料的时候,发现他们终于终于把官网文档的索引优化了!有一说一,真是方便不少,终于不再是一堆文档糊在一坨了. 另外我还发现他们居然做了一个EFR32的 ...