`

如何实现javascript截图 jQuery插件imgAreaSelect使用详解

阅读更多
如何实现javascript截图 jQuery插件imgAreaSelect使用详解

为了使用户能自定义个人头像,需要提供一个对上传图片的截图功能,当前很多网站特别是SNS类网站都提供这样的功能,非常实用。主要实现的形式有两种,一种是flash截图,另一种就是javascript截图,两种方法各有秋千,关于Flash截图可以参考一下UcHome程序中头像上传功能,但这不是我要讨论的话题,我这里主要是如何实现javascript截图,利用jQuery的imgAreaSelect插件,轻松实现自定义头像[avatar]javascript截图功能。

一,准备:
两个JS文件
1,jquery.js 下载:jquery.js
2,jquery.imgareaselect.js 下载:jquery.imgareaselect.js[imgareaselect-0.6.2.zip]

二,使用

function preview(img, selection){
var scaleX = 100 / selection.width;
var scaleY = 100 / selection.height;

//动态小头像 获取当前选中框的宽度,高度,左边框,右边框
$('#biuuu + div > img').css({
width: Math.round(scaleX * 400) + 'px',
height: Math.round(scaleY * 300) + 'px',
marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',
marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'
});
}

//加载小头像
$(document).ready(function () {
$('<div><img src="biuuu.jpg" style="position: relative;" /></div>')
.css({
float: 'left',
position: 'relative',
overflow: 'hidden',
width: '100px',
height: '100px'
})
.insertAfter($('#biuuu'));
});

//初始化加载
$(window).load(function () {
$('#biuuu').imgAreaSelect({ aspectRatio: '1:1', onSelectChange: preview });
});
三,调用

<div class="container">
<p>
<img id="biuuu" src="biuuu.jpg" title="biuuu" style="float: left; margin-right: 10px;" />
</p>
</div>
使用上面的javascript截图进行扩展可以实现很多的动态功能,jQuery提供的imgAreaSelect插件调用非常简单,其它相关应用可参考:imgAreaSelect Examples

使用jQuery插件imgAreaSelect实现javascript截图还是非常简单的,基本上就是一个动态的图像显示,获取源图片的位置和选取框的大小[宽度和高度],轻松实现javascript截图功能。

点我下载DEMO:javascript截图 imgAreaSelect插件demo
分享到:
评论
15 楼 gdw520 2013-06-25  

<div style="text-align: center; width: 50%; float: left;">
<img id="ladybug" src="ladybug.jpg" />
</div>

<form action="crop.php" method="post">

<input type="hidden" name="x1" value="" />

<input type="hidden" name="y1" value="" />

<input type="hidden" name="x2" value="" />

<input type="hidden" name="y2" value="" />

<input type="submit" name="submit" value="Submit" />

</form>

然后在初始化imgAreaSelect时,使用onSelectEnd()回调函数将选择后的数据赋给这些隐藏域,正如下面代码那样:

$(document).ready(function () {

$('#ladybug').imgAreaSelect({

onSelectEnd: function (img, selection) {

$('input[name="x1"]').val(selection.x1);

$('input[name="y1"]').val(selection.y1);

$('input[name="x2"]').val(selection.x2);

$('input[name="y2"]').val(selection.y2);

}

});

});

这样当点击"submit按钮"时,页面将上载到服务器,相应的坐标数据了。
得到坐标后
        /**
* 对图片裁剪,并把裁剪新图片保存
* @param srcPath 读取源图片路径
* @param toPath 写入图片路径
* @param x 剪切起始点x坐标
* @param y 剪切起始点y坐标
* @param width 剪切宽度
* @param height 剪切高度
* @param readImageFormat  读取图片格式
* @param writeImageFormat 写入图片格式
* @throws IOException
*/
    public void cropImage(String srcPath,String toPath,
    int x,int y,int width,int height,
    String readImageFormat,String writeImageFormat) throws IOException{  
        FileInputStream fis = null ;
        ImageInputStream iis =null ;
        try{  
            //读取图片文件
        fis = new FileInputStream(srcPath);
            Iterator it = ImageIO.getImageReadersByFormatName(readImageFormat);
            ImageReader reader = (ImageReader) it.next();
            //获取图片流
            iis = ImageIO.createImageInputStream(fis); 
            reader.setInput(iis,true) ;
            ImageReadParam param = reader.getDefaultReadParam();
            //定义一个矩形
            Rectangle rect = new Rectangle(x, y, width, height);
            //提供一个 BufferedImage,将其用作解码像素数据的目标。
            param.setSourceRegion(rect);
            BufferedImage bi = reader.read(0,param);               
            //保存新图片
            ImageIO.write(bi, writeImageFormat, new File(toPath));    
        }finally{
            if(fis!=null)
            fis.close();      
            if(iis!=null)
               iis.close();
        }
    }
14 楼 llll234eww 2013-03-20  
圣诞王子 写道
截图是显示出来了,但是怎么样保存呢

13 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢











12 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢










11 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢









10 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢








9 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢







8 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢






7 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢





6 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢




5 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢



4 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢


3 楼 zaishijieshang 2013-01-08  
zaishijieshang 写道
截图是显示出来了,但是怎么样保存呢

2 楼 zaishijieshang 2013-01-08  
截图是显示出来了,但是怎么样保存呢
1 楼 圣诞王子 2011-04-20  
截图是显示出来了,但是怎么样保存呢

相关推荐

Global site tag (gtag.js) - Google Analytics