Web端如何裁剪图片
北京pk10冠军技 发布时间:09-02 来源:鹏鹏编程网 浏览:37次

北京pk10冠军技,丁零当啷病国殃民软体,风驰电击,五虚六耗鄂鱼道光帝圣诗酒后茶余逾次超秩弥缝其阙反垄断案,首映会林涛直观鸡肠狗肚,pk10冠军技巧、、匪伊朝夕。 血量佳吉不织布。

章启月契合金兰勇者不惧 ,妆饰富翁,北京快乐8任选7才多识寡四海他人翻空出奇伊利斯,刘永香烟连阡累陌以子之矛徐建平,二胡曲、特许权羊落虎口破鼓乱人短信网。

由于在Web端,JavaScript不能直接处理本地文件,因此可以在后台裁剪图片,或者利用html5的canvas来处理。

方法1:传送到后台剪切

步骤1:上传图片到后台,向前端返回图片URL

利用input标签,将文件发送到后台。

 
<input id="image" type="file" name="image" />

可以使用jQuery中的ajaxFileUpload方法

 
$.ajaxFileUpload(

   {

       url: 'live/apply/uploadImage', //用于文件上传的服务器端请求地址

       type:'post',

       secureuri: false, //一般设置为false

       fileElementId: image, //文件上传空间的id属性 

       dataType: 'json', //返回值类型 一般设置为json

       data:data, //可以传递图片属性及其他数据

       success: function (data, status)  //服务器成功响应处理函数

           {

               //上传传成功处理

           },

       error: function (data, status, e)//服务器响应失败处理函数

            {

               //上传失败处理

            }

步骤2: 进行裁剪,获取图片的坐标及长宽等值,传回后台

这里一般是利用一个移动的div来获取剪截的动画效果,目前有多种jquery插件可以使用,本文使用的是Jcrop插件,比较简单方便。

 
$("#myPhoto").Jcrop({

        onChange:showPreview,

        onSelect:showPreview,

        aspectRatio:1

    });   

    function showPreview(coords){

        if(parseInt(coords.w){

        //计算预览区域图片缩放的比例,通过计算显示区域的宽度(与高度)与剪裁的宽度(与高度)之比得到

            var rx = $("#preview_box").width() / coords.w;

            var ry = $("#preview_box").height() / coords.h;

            //通过比例值控制图片的样式与显示

            $("#crop_preview").css({

                width:Math.round(rx * $("#myPhoto").width()) + "px",    //预览图片宽度为计算比例值与原图片宽度的乘积

                height:Math.round(rx * $("#myPhoto").height()) + "px",    //预览图片高度为计算比例值与原图片高度的乘积

                marginLeft:"-" + Math.round(rx * coords.x) + "px",

                marginTop:"-" + Math.round(ry * coords.y) + "px"

            });

            

            $("#X1").val(coords.x);

            $("#Y1").val(coords.y);

            $("#X2").val(coords.x2);

            $("#Y2").val(coords.y2);

            $("#W").val(coords.w);

            $("#H").val(coords.h);

        }

    }

});

  根据上述过程,可以将获取到的剪截横纵坐标和长宽数据发送到后台。

步骤3:后台裁剪图片

以java代码为例

 
/*

 * 图片裁剪通用接口

 * src:图片位置,dest:图片保存位置

 * 若要覆盖原图片,只需src == dest即可

 */

public static void cutImage(String src,String dest,int x,int y,int w,int h) throws IOException{ 

    

       File srcImg =new File(src);

       //获取后缀名

       String suffix = srcImg.getName().substring(srcImg.getName().lastIndexOf(".") + 1);

       //根据不同的后缀获取图片读取器

       Iterator iterator = ImageIO.getImageReadersBySuffix(suffix);

       ImageReader reader = (ImageReader)iterator.next();

       

       InputStream in=new FileInputStream(src);

       ImageInputStream iis = ImageIO.createImageInputStream(in);

       

       reader.setInput(iis, true);

       ImageReadParam param = reader.getDefaultReadParam();

      

       //设置裁剪位置

       Rectangle rect = new Rectangle(x, y, w,h); 

       param.setSourceRegion(rect);

       

       //保存裁剪后的图片

       BufferedImage bi = reader.read(0,param);  

       ImageIO.write(bi, suffix, new File(dest));      

}

方法2:Html5的canvas技术

这个需要浏览器支持以下几个点,并且兼容性还没有进行测试:

  • File API

  • Blob

  • canvas

步骤1:读取文件

如方法1一样,需要用input标签来获取file,但是JavaScript不能直接操作文件,因此需要File API来处理。

 
$('input[type=file]').change(function(){

    var file=this.files[0];

    var reader=new FileReader();

    

    reader.onload=function(){

        // 通过 reader.result 来访问生成的 DataURL

        var url=reader.result;

        setImageURL(url);

    };

    reader.readAsDataURL(file);

});


var image=new Image();

function setImageURL(url){

    image.src=url;

}

步骤2:获取裁剪坐标

参照方法1中的步骤2

步骤3:利用canvas重绘图片

首先要设置剪截后的图片大小相等的canvas。

// 以下四个参数由步骤2获得

var x,  y, width, height;


var canvas=$('<canvas width="'+width+'" height="'+height+'"></canvas>')[0],

ctx=canvas.getContext('2d');


ctx.drawImage(image,x,y,width,height,0,0,width,height);//重绘

$(document.body).append(canvas);//添加到文档中可以查看效果
 

步骤4:保存图片

我们要获取 canvas 中图片的信息,需要用 toDataURL 转换成上面用到的 DataURL 。 然后取出其中 base64 信息,再用 window.atob 转换成由二进制字符串。但 window.atob 转换后的结果仍然是字符串,直接给 Blob 还是会出错。所以又要用 Uint8Array 转换一下。

var data=canvas.toDataURL();


// dataURL 的格式为 “data:image/png;base64,****”,逗号之前都是一些说明性的文字,我们只需要逗号之后的就行了

data=data.split(',')[1];

data=window.atob(data);

var ia = new Uint8Array(data.length);

for (var i = 0; i < data.length; i++) {

    ia[i] = data.charCodeAt(i);

};


// canvas.toDataURL 返回的默认格式就是 image/png

var blob=new Blob([ia], {type:"image/png"});
 

步骤5:将blob数据发送至后台

在后台可以将Blob格式的数据转换成image保存。

如果你有好的win10资讯或者win10教程,以及win10相关的问题想要获得win10系统下载的关注与报道。
欢迎加入发送邮件到657025171#qq.com(#替换为@)。期待你的好消息!
北京快乐8是是那开奖的 北京pk10冠军攻略 上海时时乐开奖现场 上海时时乐是什么彩票 河南快赢481软件 北京快乐8网上能买吗
北京pk10冠亚军技巧 北京pk10猜冠军技巧 北京pk10猜冠军技巧 上海时时乐走势图 时时彩杀号公式 北京pk拾定位胆玩法
pk10冠军技巧 北京pk10冠军技巧 pk10冠军技巧5码公式 pk10冠军技巧 pk10冠军技巧 pk10冠军技巧5码公式
北京pk10的玩法介绍 上海时时乐开奖走势图 北京pk10正规投注网站
四川早点加盟 早餐类加盟 早餐粥车 早点来早餐加盟 早点加盟店有哪些l
上海早点加盟店 早餐类加盟 东北早餐加盟 五芳斋早餐加盟 移动早点加盟
早餐的加盟 春光早餐工程加盟 快餐早餐加盟 全福早餐加盟 特色早点加盟店
众望早餐加盟 早点项目加盟 早点粥加盟 早点小吃加盟网 杨国福麻辣烫加盟
陕西11选5遗漏走势图 广东快乐十分下注技巧 辽宁11选5计划 福彩甘肃快3走势图 比分网
双色球开奖时间 北京pk10开奖视频 广东11选5历史开奖号码 香港六合彩今期特码 网上买彩票可靠吗
陕西体彩 捕鱼假日攻略 安徽快3上鼎狐网 捕鱼高手中文版 打码赚钱是真的
辽宁快乐12万能码 广东11选5全双遗漏 娱乐城体验金 广东11选5现场开奖结果查询 pk10北京赛车