JS上传图片并显示,确定后上传,带压缩功能,php保存

此方法适以单个图片作为上传实例。

模板代码

                <div>
				    <div id='img-box'>
				    	<img id="pic" >
				    	<input id="selectpic" type="file">				    	
				    </div>	
				    <button id="save" onclick="Save()">确定</button>
		    	</div>  

监听文件选择事件,当选择图片文件时,将选择的图片显示出来。此时并不上传,可以再选择其他图片来显示。

	window.onload=function()
	{
		var input=document.getElementById('selectpic');
		input.onchange = function(obj){//触发上传事件
			readFile(this);
		}
		//处理图片并添加到对象中的函数
		var readFile = function(obj){
			//获取文件组,单个文件也是文件组,file[0]
			var file = obj.files;
			var reader= new FileReader();
			reader.readAsDataURL(file[0]);

			reader.onload=function(e){//选择图片时显示图片
				url =this.result;
				document.getElementById('pic').src=url;
				$('#img-box input').css({ 'background':'none'})
			}
		}
	}

点击'保存'按钮事件,获取文件->判断文件是否为图片文件->读取文件内容(base64格式)->压缩文件->上传文件。

	/** 获取图片文件信息并保存 **/
	function Save() 
	{
		var file=document.getElementById('selectpic').files[0];
		if(file!==undefined)
		{
			var filetype=file.name.substring(file.name.lastIndexOf('.'));
			if (filetype ==='.jpg'||filetype ==='.png'||filetype ==='.gif'|| filetype ==='.jpeg') //控制类型
			{
				name=file.name;
				var reader = new FileReader();
				reader.readAsDataURL(file);
				reader.onload=function(e){
					var f=this.result;//base64编码 console.log(f);
    				canvasDataURL(f,{quality:0.5},function(base64){                      
		              $('#pic').val(base64); //压缩后图片回显
		              upload(base64,name);    //上传压缩后的图片文件
      				});
				}
			}			
			else
			{
				g_alert('error','请选择正确的文件类型');
				return false;
			}
		}
		else
		{
			g_alert('error',"请选择文件!");
			return false;
		}
	}

    /**
	 * [canvasDataURL 图片压缩方法(可以直接复制使用)用法见save()]
	 * @param 		path   		[文件base64格式]
	 * @param 		obj    		[图片对象 {属性:值}]
	 * @param 		callback  	[回调文件base64格式]
	 * @return    {[base64]}   	[压缩后的文件内容]
	 */

      function canvasDataURL(path, obj, callback){
          var img = new Image();
          img.src = path;
          img.setAttribute("crossOrigin",'Anonymous');
          img.onload = function(){
              var that = this;
              // 默认按比例压缩
              var w = that.width,
                  h = that.height,
                  scale = w / h;
              w = obj.width || w;
              h = obj.height || (w / scale);
              var quality = 0.7;  // 默认图片质量为0.7
              //生成canvas
              var canvas = document.createElement('canvas');
              var ctx = canvas.getContext('2d');
              // 创建属性节点
              var anw = document.createAttribute("width");
              anw.nodeValue = w;
              var anh = document.createAttribute("height");
              anh.nodeValue = h;
              canvas.setAttributeNode(anw);
              canvas.setAttributeNode(anh);
              ctx.drawImage(that, 0, 0, w, h);
              // 图像质量
              if(obj.quality && obj.quality <= 1 && obj.quality > 0){
                  quality = obj.quality;
              }
              // quality值越小,所绘制出的图像越模糊
              var base64 = canvas.toDataURL('image/jpeg', quality);
              // 回调函数返回base64的值
              callback(base64);
          }
      }


	/**[上传图片信息保存]
	 * @param  		[file]		 [文件内容]
	 * @param  		[name]		 [文件名,为了获取文件类型]
	 */
	function upload(file,name)
	{
		$.ajax({
			url:url,    //上传到php处理的方法中
			type:'POST',
			data:{
				file:file,
				name:name,
			},
			dataType:'JSON',
			success:function(res){
                console.log("上传成功");		
			},
			error:function(res){
				console.log("上传失败");
			}
		});
	}

php 保存图片代码。

public function uploadPic()
	{
		$file=input('post.file/s');	//文件信息 base64格式
		$filename=input('post.name');	//文件名  微信图片.jpg
		$typef=explode('.',$filename);

		if(count($typef)>1){
			$type=$typef[1];//文件后缀
			$name=time().".".$type;			//新文件名			
		}
        else
        {
            $name=time().$filename;    //若文件名是中文,有可能出现乱码
        }
		$tmparray   =  explode(',',$file);//分离文件内容
		if(count($tmparray)>1){
			$file=$tmparray[1];//文件内容
		}

		$savePath='public/pic/'; //图片保存路径		
		if(!file_exists($savePath))
		{
			mkdir("$savePath",0777,true);  //创建路径
		}
		$size =file_put_contents($savePath.$name, base64_decode($file));//写入文件内容,保存图片,返回值是文件大小
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个问题是与技术相关的,我可以尝试来回答。首先,您需要在前端使用JavaScript编写代码来实现图片功能。可以通过FileReader对象将图片读取成DataURL,然后通过XMLHttpRequest对象将DataURL发送给后端的PHP脚本进行保存。在PHP脚本中,可以使用file_put_contents函数将接收到的图片数据保存到服务器上的文件中。具体实现代码可以参考以下示例: 前端代码: ``` <input type="file" id="fileInput"> <button onclick="uploadImage()">上</button> <script> function uploadImage() { var fileInput = document.getElementById('fileInput'); var file = fileInput.files[0]; var reader = new FileReader(); reader.onload = function(event) { var imageData = event.target.result; var xhr = new XMLHttpRequest(); xhr.open('POST', 'saveImage.php', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { console.log(xhr.responseText); } }; xhr.send('image=' + encodeURIComponent(imageData)); }; reader.readAsDataURL(file); } </script> ``` 后端代码(saveImage.php): ``` <?php $imageData = $_POST['image']; $imageData = str_replace('data:image/png;base64,', '', $imageData); $imageData = str_replace(' ', '+', $imageData); $image = base64_decode($imageData); file_put_contents('images/image.png', $image); echo '上成功'; ?> ``` 注意,为了减小数据输量,前端将图片数据编码成了DataURL形式。后端通过base64_decode函数将其解码成二进制图片数据,并保存到服务器上的文件中。这里的上路径为images/image.png,可以根据需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值