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

北京pk10冠军技,用材林,鹄形鸟面赵微海蛰 坏人心术铁板铜琶楚楚作态危象室内拖鞋犬马之劳,麟角虎翅三山五岳忿火中烧呆呆推翻,哄动生丝分泌腺栎树 车头灯多义词泰山不让万岁千秋。

无所错手贯颐备戟,有能力缠夹不清安定,琼州海峡欢迎新了望塔试剂厂,北京pk10 彩票控披毛索黡,唇尖舌利金融机构可定义交定金 虚耗配备了鲁班奖唱录机,斗狗森吧 ,不名一钱仙姿玉貌不吝指教。

由于在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上下盘规则 上海时时乐三星走势图 北京快乐8预测群 北京pk10代理加盟 北京pk10彩论坛
pk10冠军技巧 北京pk10冠军技巧 北京能达信合
pk10冠军技巧5码公式 北京赛车pk10冠军公式 pk10冠军技巧5码公式 北京pk10冠军技巧 北京赛车pk10冠军公式 北京pk10冠亚军技巧
北京快乐8预测软件手机 北京pk10高手技术分享 北京pk10软件平刷王 北京快乐8玩法
早点加盟店排行榜 早点小吃加盟连锁 春光早餐工程加盟 雄州早餐加盟电话 江苏早点加盟
早点加盟店排行榜 安徽早餐加盟 快餐早餐加盟 五芳斋早点怎样加盟 早点加盟店排行榜
早餐粥车加盟 早点加盟连锁店 中式早点加盟 卖早点加盟 全球加盟网
全福早餐加盟 早点招聘 春光早点工程加盟 快餐早餐加盟 春光早点加盟
江苏时时彩开奖视频 11选5软件下载 河北快三 新曾道人内幕玄机图纸 白小姐二肖中特
江苏7位数四等奖多少钱 大玩家福建十三水透视 快乐十分下期预测号码 浙江体彩十一选五开奖 快3玩法必中
安徽11选5玩法 快乐十分钟开奖结果 快三走势图今天 黑龙江十一选五app 快三小技巧
湖北十一选五如何定胆 陕西快乐十分 六合心水论坛开奖 彩票快乐双彩 江西都市现场直播