fileuploadJs+JcropJs+php综合小应用 实现图片拖拽上传与裁剪功能的demo

fileupload.Js+Jcrop.Js+php综合小应用 实现图片拖拽上传与裁剪功能.

麻雀虽小,五脏俱全.包含普通上传,拖拽上传,进度条,图片裁剪等实用功能的整合.

由于不是正宗的前端和时间关系,所以样式就没怎么弄.只能靠各位大神去调整了.

水平有限,有什么错漏之处欢迎大家指正.

废话少说,直接来代码:

目录结构:



需要的jq库


我想Google baidu一下这些jq插件都会有的


index.php:

<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/jquery-ui.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/jquery.iframe-transport.js"></script>
<script type="text/javascript" src="js/jquery.fileupload.js"></script>
<script type="text/javascript" src="js/jquery.Jcrop.js"></script>
<script type="text/javascript" src="js/demo.js"></script>

<style type="text/css">
.bar {
    height: 18px;
    background: green;
}
/* Fixes issue here http://code.google.com/p/jcrop/issues/detail?id=1 */
.jcrop-holder{text-align:left;}
.jcrop-vline,
.jcrop-hline{position:absolute;background:#fff url("Jcrop.gif") repeat top left;font-size:0;}
.jcrop-vline{height:100%;width:1px !important;}
.jcrop-hline{width:100%;height:1px !important;}
.jcrop-vline.right{right:0px;}
.jcrop-hline.bottom{bottom:0px;}
.jcrop-handle{width:7px !important;height:7px !important;border:1px solid #eee;background-color:#333;font-size:1px;}

.jcrop-tracker{width:100%;height:100%;}

.custom .jcrop-vline,
.custom .jcrop-hline{background:#ff0;}
.custom .jcrop-handle{border-color:black;background-color:#c7bb00;border-radius:3px;}

</style>

</head>
<body>
<input id="fileupload" type="file" name="files[]" data-url="uploadAction.php" multiple>
<div class="imagezone" style="width:500px;height:400px;border:1px solid red;float:left;">拖入图片
    <div style="width:100px;height:50px;overflow:hidden;">
        <img alt="" src="" id="imgCrop">
    </div>
</div>
<div style='float:left;'><img src="" class='imagepreview'/><button class='cropsubmit' style='display: none;'>提交</button></div>
<div id="progress" style='clear:both;'>
    <div class="bar" style="width: 0%;"></div>
</div>
<div><img class="resCrop" src="" style="width:100px;height:50px;"></div>
</body>
</html>

demo.js:

$(function () {
    $('#fileupload').fileupload({
        sequentialUploads:true,
        autoUpload:true,
        dataType: 'json',
        acceptFileTypes:/^image\/(gif|jpeg|png)$/,
        url:'uploadAction.php',
        formData:{},
        dropZone:$('.imagezone'),
        done: function (e, data) {
            $('.imagepreview').attr('src','uploads/'+data.result.imgname);
            $('.cropsubmit').show().on('click', cropsubmit);
            $('#imgCrop').attr('src','uploads/'+data.result.imgname);
		    $('.imagepreview').Jcrop({
                aspectRatio:2,
                minSelect:[30,15],
                bgOpacity:0.7,
                onChange:updatePreview,
                onSelect:updatePreview,
            },function(){
            		// Use the API to get the real image size
            		var bounds=this.getBounds();
            		boundx=bounds[0];
            		boundy=bounds[1];
//             		console.log(bounds);
            		// Store the API in the jcrop_api variable
            		jcrop_api=this;
            	});
		    function cropsubmit(){
			    var s = jcrop_api.tellSelect(),
			        url = 'uploads/'+data.result.imgname,
			        imgname = data.result.imgname;
				$.post('cropAction.php', {'xy':s,'url':url,'imgname':imgname}, function(json){
					$('.resCrop').attr('src', json.cropurl);
					$('.imagepreview').parent().remove();
				}, 'json');
			};
			function updatePreview(c){
				if(parseInt(c.w)>0){
					var rx=100/c.w;
					var ry=50/c.h;
					
					$("#imgCrop").css({
						width:Math.round(rx*boundx)+"px",
						height:Math.round(ry*boundy)+"px",
						marginLeft:"-"+Math.round(rx*c.x)+"px",
						marginTop:"-"+Math.round(ry*c.y)+"px"
					});
				};
			};
				        	
        },
	    progressall: function (e, data) {
            	var progress = parseInt(data.loaded / data.total * 100, 10);
           	$('#progress .bar').css('width',progress + '%');
        	}
    });
});	


原图处理Action uploadAction.php:

<?php

if ($_FILES['files']['error'][0] == 0) {
	$filename = explode('.', $_FILES['files']['name'][0]);
	$dist = 'uploads/' . time() . '.' . $filename[1];

	if(move_uploaded_file($_FILES['files']['tmp_name'][0], $dist)){
		$imgname = substr(strrchr($dist,'/'),1);
		$result = array('imgname' => $imgname);
		header ( "Content-Type:text/html; charset=utf-8" );
        exit ( json_encode ( $result ) );
	}
}
?>


图片裁剪处理Action cropAction.php:

<?php
    
    $src_x = $_POST['xy']['x'];
    $src_y = $_POST['xy']['y'];
    
    $crop_width = $_POST['xy']['w'];
    $crop_height = $_POST['xy']['h'];
    
    $srcIm = @imagecreatefromjpeg($_POST['url']);
    $dstIm = @imagecreatetruecolor($crop_width,$crop_height);
    
    imagecopy($dstIm, $srcIm, 0, 0, $src_x , $src_y, $crop_width, $crop_height);
    imagejpeg($dstIm, 'uploads/crop_'.$_POST['imgname'], 100); //生成图片
    
    imagedestroy($dstIm);
    imagedestroy($srcIm);
    echo json_encode(array('cropurl'=>'uploads/crop_'.$_POST['imgname']));
?>

付上jcrop.gif小图标



微笑 结束.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值