全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

利用Javascript裁剪图片并存储的简单实现

前言

就我而言,页面上的设计比较灵动的部分,其实不是很多,诸如滑动验证码,图片裁剪等比较好的交互设计。

从刚开始工作的时候,我就想把这些东西了解下,无奈一直没这个需求,乘着今天的空闲,研究了一下午,期间遇到了大大小小的问题,一直备受折磨,这其实也反映一个问题,我的

还是比较薄弱。

实现效果:

用户点击上传图片后,页面显示所上传的图片,并且出现裁剪框和两个预览区域,最后点击裁剪按钮保存裁剪的图片到服务器上。 

效果很简单,整个过程我遇到的两个难点,第一个是裁剪的JS效果,第二个则是图片数据的处理。 

对于第一个问题,我引用了网上的一个插件,就我感觉来说,裁剪过程用户的满意度只能算一般,因为它只能裁剪正方形区域,就算边框上有八个拉动设置,但是拉动框时还是按正方形缩放,就这点不太让我满意。

实现方法如下: 

以下是简单的页面设计:

<div style="float:left;"><img id="target"></div>
<div style="width:48px;height:48px;margin:10px;overflow:hidden; float:left;"><img style="float:left;" id="preview" ></div>
<div style="width:190px;height:195px;margin:10px;overflow:hidden; float:left;"><img style="float:left;" id="preview2" ></div>
<form action="{:U('/test/crop_deal')}" method="post" onsubmit="return checkCoords()" enctype="multipart/form-data" id="form">
<input type="file" name="file" onchange="change_image(this)">
<input type="hidden" id="x" name="x" />
<input type="hidden" id="y" name="y" />
<input type="hidden" id="w" name="w" />
<input type="hidden" id="h" name="h" />
<input type="submit" value="裁剪"/>
</form>

下面是JS代码:

function change_image(file){
var reader = new FileReader();
reader.onload = function(evt){
$("#target").attr('src',evt.target.result);
$('#preview').attr('src',evt.target.result);
$('#preview2').attr('src',evt.target.result);
// $('#target').css({"height":"600px","width":"600px"});
// 限制了大小会影响到截图的效果
};
reader.readAsDataURL(file.files[0]);

var jcrop_api, boundx, boundy;

setTimeout(function(){


$('#target').Jcrop({
minSize: [48,48],
setSelect: [0,0,190,190],
onChange: updatePreview,
onSelect: updatePreview,
onSelect: updateCoords,
aspectRatio: 1
},
function(){
// Use the API to get the real image size
var bounds = this.getBounds();
boundx = bounds[0];
boundy = bounds[1];
// Store the API in the jcrop_api variable
jcrop_api = this;
});

function updatePreview(c){
if (parseInt(c.w) > 0)
{
var rx = 48 / c.w; //小头像预览Div的大小
var ry = 48 / c.h;

$('#preview').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'
});
}
{
var rx = 199 / c.w; //大头像预览Div的大小
var ry = 199 / c.h;
$('#preview2').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'
});
}
};


function updateCoords(c)
{
$('#x').val(c.x);
$('#y').val(c.y);
$('#w').val(c.w);
$('#h').val(c.h);
};

},500);

}

这里稍作两点提醒:

其一:不要忘记在页面头部引入插件:

  <script src="/plug/js/jquery.min.js" type="text/javascript"></script>
  <script src="/plug/js/jquery.Jcrop.min.js" type="text/javascript"></script>
  <link rel="stylesheet" href="/plug/css/Jcrop.css" rel="external nofollow" type="text/css" />

其二:有些人眼尖的话可能看到了JS里有个定时,同时心理是不是很疑惑这不是有点多此一举吗?其实不是,上传图片到JS加载到页面上,是需要时间的,这个定时的意义在于

等到图片被JS加载到页面上时才去加载裁剪效果,这里也是反复实验后得出的做法。 

后端PHP处理我用的是THINKPHP框架,版本是3.1.3

贴上代码:

function crop_deal(){
  ob_clean();
  import ( 'ORG.Net.UploadFile' );
  $upload = new UploadFile ();
  $upload->maxSize = 2000000;
  $upload->allowExts = array (
    'jpg',
    'gif',
    'png',
    'jpeg'
  );
  $upload->savePath = './upload/test/';
  $upload->autoSub = true;
  $upload->subType = 'date';
  $upload->dateFormat = 'Ymd';
  if ($upload->upload () ) {
    $info = $upload->getUploadFileInfo();
    $new_path = "./upload/test/thumb".date('Ymd');
    $file_store = $new_path."/".date('YmdHis').".jpg";
    if(!file_exists($new_path)){
      mkdir($new_path,0777,true);
    }
    $source_path = "http://".$_SERVER['HTTP_HOST']."/upload/test/".$info[0]['savename'];
    $img_size = getimagesize($source_path);
    $width = $img_size[0];
    $height = $img_size[1];  
    $mime = $img_size['mime'];
    $srcImg = imagecreatefromstring(file_get_contents($source_path));
    $cropped_img = imagecreatetruecolor($_POST['w'], $_POST['h']);
    //缩放
    // imagecopyresampled($cropped_img,$srcImg,0,0,$_POST['x'],$_POST['y'],$_POST['w'],$_POST['h'],$width,$height);
    //裁剪
    imagecopy($cropped_img,$srcImg,0,0,$_POST['x'],$_POST['y'],$_POST['w'],$_POST['h']);
    header("Content-Type:image/jpeg");
    imagejpeg($cropped_img,$file_store);
    imagedestroy($srcImg);
    imagedestroy($cropped_img);
  }

}

这里就是调用GD库里创建图像的一系列方法,最重要就是imagecopy() ,它是将原图按规定的裁剪位置,裁剪大小复制到新的图片上去,这也说明了一件事,页面用户在裁剪图片

的时候其实前端并没有对图片操作,而是得到裁剪时的坐标位置,裁剪大小,然后提交到PHP操作!!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用Swift能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# javascript  # 图片裁剪  # js图片裁剪上传  # js裁剪图片并上传图片  # js实现点击后将文字或图片复制到剪贴板的方法  # php+js实现图片的上传、裁剪、预览、提交示例  # js+jquery实现图片裁剪功能  # jquery imgareaselect 使用利用js与程序结合实现图片剪切  # 使用JavaScript+canvas实现图片裁剪  # 基于原生JS实现图片裁剪  # javascript 图片裁剪技巧解读  # JS实现图片剪裁并预览效果  # 基于JavaScript实现图片剪切效果  # 第一个  # 加载  # 上传图片  # 就我  # 的是  # 我就  # 让我  # 有个  # 不太  # 则是  # 最重要  # 上有  # 不是很  # 它是  # 这也  # 我用  # 较好  # 第二个  # 这不是  # 很简单 


相关文章: 广德云建站网站建设方案与建站流程优化指南  建站之星客服服务时间及联系方式如何?  建站主机系统SEO优化与智能配置核心关键词操作指南  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  建站之星24小时客服电话如何获取?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  做企业网站制作流程,企业网站制作基本流程有哪些?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  购物网站制作公司有哪些,哪个购物网站比较好?  如何高效完成自助建站业务培训?  如何在阿里云服务器自主搭建网站?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  常州自助建站工具推荐:低成本搭建与模板选择技巧  如何选择高效响应式自助建站源码系统?  如何通过多用户协作模板快速搭建高效企业网站?  建站之星会员如何解锁更多建站功能?  建站之星如何快速生成多端适配网站?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  北京网站制作的公司有哪些,北京白云观官方网站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  在线制作视频网站免费,都有哪些好的动漫网站?  怎么将XML数据可视化 D3.js加载XML  宝塔Windows建站如何避免显示默认IIS页面?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站DNS解析失败?如何正确配置域名服务器?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何高效利用亚马逊云主机搭建企业网站?  智能起名网站制作软件有哪些,制作logo的软件?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  建站主机选虚拟主机还是云服务器更好?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  婚礼视频制作网站,学习*后期制作的网站有哪些?  如何快速查询网站的真实建站时间?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  建站之星好吗?新手能否轻松上手建站?  如何有效防御Web建站篡改攻击?  如何快速搭建自助建站会员专属系统?  如何通过主机屋免费建站教程十分钟搭建网站?  电商平台网站制作流程,电商网站如何制作?  如何高效完成独享虚拟主机建站?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  C#怎么创建控制台应用 C# Console App项目创建方法  免费ppt制作网站,有没有值得推荐的免费PPT网站?  海南网站制作公司有哪些,海口网是哪家的?  建站之星如何通过成品分离优化网站效率? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。