PHP和jQuery实现截图自定义头像

在一些SNS网站上常会有一些自定义头像的功能,这里介绍一个用PHP和jQuery实现截图自定义头像的方法,需要的环境和前提如下:

1,PHP 需要 GD 2.0.1 或更高版本
2,jQuery库
3,jQuery图片处理插件imgareaselect

其中imgareaselect插件可以参考其官方网站:http://odyniec.net/projects/imgareaselect/ ,也可浏览本博客的相关内容:jQuery的截图插件imgAreaSelect,这里介绍了设置 imgAreaSelect 插件里所有参数及其描述。

HTML头需要引入的文件:

<head>
<link rel="stylesheet" type="text/css" href="css/imgareaselect-default.css" />
<script type="text/javascript" src="scripts/jquery.min.js"></script>
<script type="text/javascript" src="scripts/jquery.imgareaselect.pack.js"></script>
<head>
其中CSS文件是jQuery的截图插件imgAreaSelect压缩包里自带的CSS样式,jquery.min.js 是jQuery库文件,jquery.imgareaselect.pack.js是imgareaselect插件的文件。


Javascript 代码:

<script type="text/javascript">
function preview(img, selection) {
var scaleX = 100 / selection.width;//100指的是新图的宽
var scaleY = 100 / selection.height;//100指的是新图的高
$('#thumbnail img').css({
width: Math.round(scaleX * 800) + 'px', //800指的是原图的宽
height: Math.round(scaleY * 600) + 'px', //600指的是原图的高
marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',
marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'
});
$('#x1').val(selection.x1);
$('#y1').val(selection.y1);
$('#x2').val(selection.x2);
$('#y2').val(selection.y2);
$('#w').val(selection.width);
$('#h').val(selection.height);
}
$(document).ready(function () {
$('img#photo').imgAreaSelect({ x1: 0, y1: 0, x2: 50, y2: 50, fadeSpeed:10,aspectRatio: '1:1', handles:"corners",onSelectChange: preview});
$('#save_thumb').click(function() {
var x1 = $('#x1').val();
var y1 = $('#y1').val();
var x2 = $('#x2').val();
var y2 = $('#y2').val();
var w = $('#w').val();
var h = $('#h').val();
if(x1=="" || y1=="" || x2=="" || y2=="" || w=="" || h==""){
alert("image is null");
return false;
}else{
return true;
}
});
});
 </script>
其中preview函数是当选择截图的时候,有一个预览的效果

HTML代码:

<div style="float:left;" class="frame">
<img src="Water lilies.jpg" id="photo"/>
</div>
<div style="float:left; width: 100px; height: 100px;" id="thumbnail">
   <div style="overflow: hidden; width: 100px; height: 100px;" id="preview">
    <img src="Water lilies.jpg"/>
   </div>
</div>
<div style="margin-top:10px;">
<form name="thumbnail" action="imgareaselect.php" method="post">
<input type="hidden" name="x1" value="" id="x1" />
<input type="hidden" name="y1" value="" id="y1" />
<input type="hidden" name="x2" value="" id="x2" />
<input type="hidden" name="y2" value="" id="y2" />
<input type="hidden" name="w" value="" id="w" />
<input type="hidden" name="h" value="" id="h" />
<input type="submit" name="upload_thumbnail" value="save thumb" id="save_thumb" />
</form>
</div>
PHP代码:

$ifn = "Water lilies.jpg";
$ofn = "test_thumb.jpg";
$ext = strtoupper(end(explode('.',$ifn)));
if(is_file($ifn) && ($ext == "JPG" || $ext == "JPEG")){
$source = imagecreatefromjpeg($ifn);
}elseif(is_file($ifn) && $ext == "PNG"){
$source = imagecreatefromPNG($ifn);
}elseif(is_file($ifn) && $ext == "GIF"){
$source = imagecreatefromGIF($ifn);
}
$sourceWidth  = imagesx($source);
$sourceHeight = imagesy($source);
$thumbWidth = $_POST['w'];
$thumbHeight = $_POST['h'];
$thumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
$x1 = $_POST['x1'];
$y1 = $_POST['y1'];
$x2 = $_POST['x2'];
$y2 = $_POST['y2'];
imagecopyresampled($thumb,
$source,
0,
0,
$x1,
$y1,
$thumbWidth,
$thumbHeight,
$thumbWidth,
$thumbHeight
);
imagejpeg($thumb, $ofn);
这里重点介绍一下imagecopyresampled函数相关资料,
说明:imagecopyresampled 重采样拷贝部分图像并调整大小

原型:bool imagecopyresampled ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )dst_image 和 src_image 分别是目标图像和源图像的标识符。

其它:imagecopyresampled(目标图像,源图像,存宽度,存高度,坐标X,坐标Y,源宽度,源高度) 如果成功则返回 TRUE,失败则返回 FALSE。 imagecopyresampled() 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。如果源和目标的宽度和高度不同,则会进行相应的图像收缩和拉伸。坐标指的是左上角。本函数可用来在同一幅图内部拷贝(如果 dst_image 和 src_image 相同的话)区域,但如果区域交迭的话则结果不可预知。

注意事项: 因为调色板图像限制(255+1 种颜色)有个问题。重采样或过滤图像通常需要多于 255 种颜色,计算新的被重采样的像素及其颜色时采用了一种近似值。对调色板图像尝试分配一个新颜色时,如果失败我们选择了计算结果最接近(理论上)的颜色。这并不总是视觉上最接近的颜色。这可能会产生怪异的结果,例如空白(或者视觉上是空白)的图像。要跳过这个问题,请使用真彩色图像作为目标图像,例如用 imagecreatetruecolor() 创建的。

版本要求: 本函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。

经过数20天的开发,shearphoto的第一个版本终于完成, 我开发shearphoto的全因是切图,截图这类WEB插件实在太少,我特此还专门在网上下载过几个关于截图插件, 基本上互联网上所有的截图插件我都看过了一遍,压根没有令我满意的,要不功能太小,要不BUG超多 要不都基于FLASH的,基于FLASH的截图很不好,扩展性非常差,不方便二次开发这是一个重点问题。 还有些截图插件是收费200块去版权,本来就不怎么让人满意,还收费呢!我就不点名是哪个截图插件了。 于是就想到自己开发一个这样的插件。 本人开发shearphoto前提,首先是不会对代码进行加密,所有代码都是开源的,必须兼容目前所有浏览器(包括IE6)。 也就是说你可以对shearphoto任意修改!另外shearphoto不会对你收取任何费用,当然如果你要找本人定制开发就另谈了! 再说说这20天开发,那简直就是人间炼狱,每天12小时,烟量不段增加,无数的开发难题困扰着,光插件内的JS方法重写,就超过5次。 重写又重写,重写又有BUG,很多时候,真的无法解决了,我想过放弃,做这种插件首先不赚钱,还占用大量的时间。 每次想到放弃,我都想安慰自己"都开发了一大半了,放弃了就什么都没了,放弃就输了",正是我这种不屈服的精神,shearphoto终于完成了, shearphoto是我内心挣扎和汗水交织而成的作品,我不敢说shearphoto没有BUG,也不敢说shearphoto的代码没有问题。目前shearphoto还处于公测阶段,如果你发现有BUG或者某些代码写得不好,请第一时间联系我 QQ399195513 shearphoto是JS面向对象开发,绝对不含JQUERY,更不含第三方代码,更更没有第三方插件,全部采用原生JS和原生PHP开发。 为什么shearphoto不使用JQUERY,本人玩了JQUERY三年,对JQUERY一点好感也没有,反而造就了一批懒人,对技术的提升没有半点好处。 再者,JQUERY是一个类库,很多方法都帮你写好了,如果使用了JQUERY,那插件的功劳是不是要算上JQUERY一份呢,因此shearphoto在开发前就严重拒绝JQUERY驾入 以后的后续升级也不会有JQUERY的存在!shearphoto的原则:免费,开源,兼容目前所有浏览器,纯原生JS和PHP编写。 有人问:为什么只有PHP后端,没有JAVA和NET,很遗含告诉你,本人不懂JAVA和NET,但是以后的升级我会加上去的,当然你JAVA和NET玩得牛B,你可以在我的JS基础上编写。 目前shearphoto只支持PHP,如果你把JAVA或NET写了,可以发我一份,那么你就是shearphoto开发者之一!呵呵! shearphoto的应用范围: 1:网站会员头像截取,shearphoto能自由设置按比例截图或不按比例截图,也可以对图片旋转,在线拍照,你可以截取不同比例的,不同大小,各种旋转的图片。后台 前台均有设置接口,非常简单 2:商城商品图片切割,例如这个商品图片,有的图像部份我要去掉,那么shearphoto就能帮助你进行切割,又例如这个图片太大了,我想切小点,shearphoto也能帮你实现 3:在线美工切图等 shearphoto的用途非常广,shearphoto截图灵敏,拉伸或拖拽时都非常流畅,不像FLASH的截图插件那么卡,半于反应不过来,shearphoto易于二次开发,所有代码都是开源的HTML,JS PHP编写,二次非常简单 shearphoto的官方网站:www.shearphoto.com,网站有开发文档,以及shearphoto讨论区,大家可以在官网进行交流心得或者定制开发 你也可以加入shearphoto官方QQ群:461550716,分享与我进行交流。 shearphoto是属于大家的,shearphoto创造崭新截图环境,希望大家喜欢shearphoto 本程序版本号:shearphoto1.0 版本号:shearphoto1.0 shearphoto官网:www.shearphoto.com shearphoto官方QQ群:461550716 2015年8月7日 明哥先生
经过数20天的开发,shearphoto的第一个版本终于完成, 我开发shearphoto的全因是切图,截图这类WEB插件实在太少,我特此还专门在网上下载过几个关于截图插件, 基本上互联网上所有的截图插件我都看过了一遍,压根没有令我满意的,要不功能太小,要不BUG超多 要不都基于FLASH的,基于FLASH的截图很不好,扩展性非常差,不方便二次开发这是一个重点问题。 还有些截图插件是收费200块去版权,本来就不怎么让人满意,还收费呢!我就不点名是哪个截图插件了。 于是就想到自己开发一个这样的插件。 本人开发shearphoto前提,首先是不会对代码进行加密,所有代码都是开源的,必须兼容目前所有浏览器(包括IE6)。 也就是说你可以对shearphoto任意修改!另外shearphoto不会对你收取任何费用,当然如果你要找本人定制开发就另谈了! 再说说这20天开发,那简直就是人间炼狱,每天12小时,烟量不段增加,无数的开发难题困扰着,光插件内的JS方法重写,就超过5次。 重写又重写,重写又有BUG,很多时候,真的无法解决了,我想过放弃,做这种插件首先不赚钱,还占用大量的时间。 每次想到放弃,我都想安慰自己"都开发了一大半了,放弃了就什么都没了,放弃就输了",正是我这种不屈服的精神,shearphoto终于完成了, shearphoto是我内心挣扎和汗水交织而成的作品,我不敢说shearphoto没有BUG,也不敢说shearphoto的代码没有问题。目前shearphoto还处于公测阶段,如果你发现有BUG或者某些代码写得不好,请第一时间联系我 QQ399195513 shearphoto是JS面向对象开发,绝对不含JQUERY,更不含第三方代码,更更没有第三方插件,全部采用原生JS和原生PHP开发。 为什么shearphoto不使用JQUERY,本人玩了JQUERY三年,对JQUERY一点好感也没有,反而造就了一批懒人,对技术的提升没有半点好处。 再者,JQUERY是一个类库,很多方法都帮你写好了,如果使用了JQUERY,那插件的功劳是不是要算上JQUERY一份呢,因此shearphoto在开发前就严重拒绝JQUERY驾入 以后的后续升级也不会有JQUERY的存在!shearphoto的原则:免费,开源,兼容目前所有浏览器,纯原生JS和PHP编写。 有人问:为什么只有PHP后端,没有JAVA和NET,很遗含告诉你,本人不懂JAVA和NET,但是以后的升级我会加上去的,当然你JAVA和NET玩得牛B,你可以在我的JS基础上编写。 目前shearphoto只支持PHP,如果你把JAVA或NET写了,可以发我一份,那么你就是shearphoto开发者之一!呵呵! shearphoto的应用范围: 1:网站会员头像截取,shearphoto能自由设置按比例截图或不按比例截图,也可以对图片旋转,在线拍照,你可以截取不同比例的,不同大小,各种旋转的图片。后台 前台均有设置接口,非常简单 2:商城商品图片切割,例如这个商品图片,有的图像部份我要去掉,那么shearphoto就能帮助你进行切割,又例如这个图片太大了,我想切小点,shearphoto也能帮你实现 3:在线美工切图等 shearphoto的用途非常广,shearphoto截图灵敏,拉伸或拖拽时都非常流畅,不像FLASH的截图插件那么卡,半于反应不过来,shearphoto易于二次开发,所有代码都是开源的HTML,JS PHP编写,二次非常简单 shearphoto的官方网站:www.shearphoto.com,网站有开发文档,以及shearphoto讨论区,大家可以在官网进行交流心得或者定制开发 你也可以加入shearphoto官方QQ群:461550716,分享与我进行交流。 shearphoto是属于大家的,shearphoto创造崭新截图环境,希望大家喜欢shearphoto 本程序版本号:shearphoto1.0 版本号:shearphoto1.0 shearphoto官网:www.shearphoto.com shearphoto官方QQ群:461550716 2015年8月7日 明哥先生
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值