1. 程式人生 > >jquery擴充套件html5+canvas實現多張圖片 預覽 壓縮 上傳

jquery擴充套件html5+canvas實現多張圖片 預覽 壓縮 上傳

主要javascript程式碼

(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 程式碼

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width,inital-scale=1.0,minimum-scale=1.0,maximum-scake=1.0,user-scalable=no" />
	<meta name="apple-mobile-web-app-capable" content="yes" />
	<meta name="apple-mobile-web-status-bar-style" content="block" />
	<meta name="fromat-detecition" content="telephone=no" />
	<link rel="stylesheet" type="text/css" href="css/aiiUpload.css" />
	<title></title>
	<script type="text/javascript" src="lib/jquery-1.8.2.min.js"></script>
	<script type="text/javascript" src="lib/aiiUpload.js"></script>
</head>
<body>
<section class="section">
	<div id="box"></div>
	<p style="color:red;">*樣式修改請參考aiiUpload.css</p>
</section>
<script type="text/javascript">
	$('#box').aiiUpload({
		method:'POST',
		action:'form.php',
		max_h:300,
		max_w:300,
		subText:'上傳圖片',
		fileText:'選擇圖片'
	});
</script>
</body>
</html>

php程式碼
<?php
	for($i=0;$i<count($_POST['img']);$i++)
	{
		$IMG=base64_decode($_POST['img'][$i]);
		file_put_contents($i.'.png', $IMG);
		echo '<img src="'.$i.'.png" />';
	}
?>


有不好的地方,望大家指導

驚恐不知道哪裡上傳檔案~~~~~

相關推薦

jquery擴充套件html5+canvas實現圖片 壓縮

主要javascript程式碼 (function($){ $.fn.extend({ aiiUpload:function(obj) { if(typeof obj !="object") { alert('引數錯誤'); retur

ionic3從手機相簿選擇照片到伺服器

安裝外掛①image-picker選擇多張照片--參照https://ionicframework.com/docs/native/image-picker/命令--ionic cordova plugin add cordova-plugin-telerik-imagepi

Html5 Canvas 實現圖片合成

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="keywords" con

基於“formData批量的多種實現” 的圖片的多種實現 formData批量的多種實現

  前言   圖片上傳是web專案常見的需求,我基於之前的部落格的程式碼(請戳:formData批量上傳的多種實現)裡的第三種方法實現多圖片的預覽、上傳,並且支援三種方式新增圖片到上傳列表:選擇圖片、複製貼上圖片、滑鼠拖拽圖片,同時支援從上傳列表中移除圖片(點選“X”號)      效果演示   選擇

利用FileReader和FormData實現圖片(base64轉二進位制檔案)

業務有個需求,要做圖片預覽上傳,過去都是客戶端上傳給後端,後端返回 url 前端進行預覽,現在其實可以不依賴後端做預覽,最後在上傳,這主要依賴 FileReader 和 FormData 這兩個物件和 JavaScript 處理二進位制的能力。 OK,Show cod

Django+jQuery cropper實現使用者頭像裁剪, [原創]

{% extends "account/base.html" %} {% load static %} {% block content %} {% if user.is_authenticated %} | <a href="{% url 'account_email' %}">Manage

js圖片,前端修改檔名

<!doctype html><html lang="en"><head>    <meta charset="UTF-8">    <title>Demo</title>   <!--  IE需要

Vue.js 2.0 移動端拍照壓縮圖片

在學習和使用Vue.js 2.0 的過程中遇到不少不一樣的地方,本來移動端開發H5應用,準備將mui框架和Vue.js+vue-router+vuex 全家桶結合起來使用,但是在拍照上傳的實現過程中遇到了無法呼叫plus的H5+介面的問題,所以最後拍照上傳功能還是使用input file方式裡解決的。但是

H5圖片(WEB前端)

web上傳圖片很簡單,網上有許多的demo和js,但是本人嫌棄用那些會引入許多js包,所以還是用原生的jquery來寫吧。 一、html佈局檔案 html有一個自己的上傳檔案控制元件---input,只需要將其type屬性設定為file即可上傳檔案,accept=“image/”是用來限制檔案型別為imag

利用jquery實現圖片淡入淡出

功能描述: 圖片播放分為2個順序:正序和反序,正序就是從第一張到最後一張,然後再第一張,反序是從第一張開始,然後最後一張,再到第一張。 1:當沒有滑鼠操作時,圖片正序播放,每隔特定時間播放一次。 2:如果滑鼠從左向右滑動,則圖片跳過間隔時間,播放順序強制切換為正序,立即播放

微信小程序實現圖片同時的方法

地址 complete 就是 name func pre files success fun 對於微信小程序上傳圖片其實很麻煩的,每次只能上傳一張,所有很多朋友就會問想要多張圖片上傳怎麽辦?這裏使用遞歸,當上傳完一張圖片後重新執行這個函數,直到所有的圖片都上傳完成後,就不再

uni-app圖片壓縮轉base64位 利用遞歸來實現圖片壓縮

form raw zip nbsp trunc ucc 1.9 兩個文件 gettime //選擇圖片 chooseImage(){ let that =this uni.chooseImage({ sizeType: [‘original‘,‘c

uni-app圖片壓縮轉base64位 利用遞迴來實現圖片壓縮

//選擇圖片 chooseImage(){ let that =this uni.chooseImage({ sizeType: ['original','compressed'], //可以指定是原圖還是壓縮圖,預設二者都有 count: 9,//預設9 suc

用原生JS實現圖片功能(相容IE8)

最近需要做一個圖片上傳預覽的功能(相容IE8-11、chrome、firefox等瀏覽器),網上現有的檔案上傳元件(如webuploader)總是會遇到一些相容性問題。於是我參考了一些博文(連結找不到了⊙o⊙…),自己用原生JS寫了一個支援多張圖片上傳預覽功能的Demo 先通過最終效果看一下功能:

react-native實現圖片

最近在搞這個圖片上傳功能,,剛開始的時候iOS用的是 react-native-image-crop-picker這個外掛,,iOS那邊完美執行沒有毛病,,,但是到android這邊之後就開始報各種資源

用matlab實現圖片合併

I = imread('qiegray.jpg'); i=imrotate(I,45); j=imrotate(I,315); h1 = axes('position', [0.0 0.0 1.0 1.0], 'parent', gcf); imshow(I, 'paren

使用h5的canvas實現圖片的合併

思路: 1.首先等待圖片載入完成 2.然後使用canvas完成圖片的合併 3.顯示合成圖片 步驟: 1.根據第一個思路,需要image的load和error事件,大致流程: var l_image = new Image(); l_image.sr

使用TransitionDrawable實現圖片淡入淡出的效果

歡迎介面想做出廣告頁自動輪播的效果,圖片切換的方式用淡入淡出的方式。這個在h5頁面很容易就實現了,但是在android介面中,很容易就想到了動畫animation動畫來實現,但是發現使用動畫的話,這種方式看起來不會自然,因為在呼叫statAnimation的時候

opencv2實現圖片路線路牌檢測_計算機視覺大作業2

linefinder.h同上一篇博文 main.cpp /*------------------------------------------------------------------------------------------*\ This file con

iOS 使用AFNetworking實現圖片

#import "AFNetworking.h" /**  *  上傳帶圖片的內容,允許多張圖片上傳(URL)POST  *  *  @param url          傳url