+ -
当前位置:首页 → 问答吧 → php+ajax剪切图片(1.26更新)

php+ajax剪切图片(1.26更新)

时间:2006-12-18

来源:互联网

小弟最近学了点AJAX的皮毛,有点冲动作了这个小程序,再配合smarty功能能就更强大了 呵呵

感谢php.china指点修正了错误;P

image.html代码:
复制内容到剪贴板
代码:
<style>
#image{background-image:url(test1.jpg);width:1000px;height:200px;border:1px solid #000}
/*绝对定位很重要*/
#helper{position:absolute;width:100px;height:100px;border:1px solid #a9b53f;cursor:pointer;display:none;background-color:#999;top:30px;left:30px}
</style>
<script>
//目标源
var target;
//拖拽辅助容器
var helper;
//鼠标默认状态(false=没有按下)
var iMouseDown=false;
//当前的目标源
var ctar;
//鼠标偏移量
var mouseOff;
//ajax相关
var ajax;
//继承number类的NANA0,用途为:如果一个数为100px会返回100。
Number.prototype.NaN0=function(){return isNaN(this)?0:this;}
//初始化AJAX
function createRequest(){
var ajax;
if(window.ActiveXObject){
  try{
   ajax = new ActiveXObject("Microsoft.XMLHTTP");
  }catch(e){
   ajax = false;
  }
}else{
  try{
   ajax = new XMLHttpRequest();
  }catch(e){
   ajax = false;
  }
}
if(!ajax){
  alert("Error creating the XMLHttpRequest object.");
}else{
  return ajax;
}
}
//反送AJAX请求
function cutp(cutC){
ajax=createRequest();
ajax.onreadystatechange = action;
//发送请求的URL
url = "path=./test1.jpg&x="+parseInt(cutC.style.left)+"&y="+parseInt(cutC.style.top)+"&width="+parseInt(cutC.offsetWidth)+"&height="+parseInt
(cutC.offsetHeight);
window.status = url;
ajax.open("GET", "image.php?"+url, true);
ajax.send(null);
}
function action(){
var show = document.getElementById("show");
//如果SHOW这个容器原先有子节点,就清楚子节点
if(show.hasChildNodes()){
  show.removeChild(show.childNodes[0]);
}
//状态为4&200的时候返回信息
if(ajax.readyState==4&&ajax.status==200){
  show.innerHTML = ajax.responseText;
}
}
//创建可拖拽容器
function createContainer(arg){
helper = document.getElementById('helper');
//设置属性
helper.setAttribute("cut",1);
arg.onmouseover = function(){
  helper.style.display="block";
}
arg.onmouseout = function(){
  helper.style.display="none";
}
helper.ondblclick = function(){
  cutp(helper);
}
}
//获取鼠标位置
function mouseCoords(ev){
if(ev.pageX || ev.pageY){
  return {x:ev.pageX, y:ev.pageY};
}
return {
  x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
  y:ev.clientY + document.body.scrollTop  - document.body.clientTop
};
}

//获取鼠标在当前容器的偏移量
function getMouseOffset(target, ev){
ev = ev || window.event;
var docPos    = getPosition(target);
var mousePos  = mouseCoords(ev);
return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}
//获取鼠标相对父节点的偏移量
function getPosition(e){
var left = 0;
var top  = 0;
while (e.offsetParent){
  left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
  top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
  e     = e.offsetParent;
}
left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
return {x:left, y:top};
}
//鼠标移动处罚的函数
function mouseMove(ev){
ev = ev||window.event;
var tar = ev.target||ev.srcElement;
var mousePos = mouseCoords(ev);
var rootar = tar.parentNode;
var mouseOf = getPosition(rootar);
//判断状态
if(iMouseDown&&mouseOff){
  var limLefX=mouseOf.x+rootar.offsetWidth-tar.offsetWidth;
  var limBottomY =mouseOf.y+rootar.offsetHeight-tar.offsetHeight;
  var conLeft = mousePos.x-mouseOff.x;
  var conTop = mousePos.y-mouseOff.y;
  if(conLeft>=mouseOf.x&&conLeft<=limLefX){
   helper.style.left = mousePos.x-mouseOff.x;
  }
  if(conTop>=mouseOf.y&&conTop<=limBottomY){
   helper.style.top = mousePos.y-mouseOff.y;
  }
}
}

//鼠标按键起来的函数
function mouseUp(){
iMouseDown = false;
}

//按下鼠标按键的函数
function mouseDown(ev){
iMouseDown = true;
ev = ev||window.event;
var tar = ev.target||ev.srcElement;
if(tar.getAttribute("cut")){
  var hmouseOff = getPosition(tar);
  helper.style.left = hmouseOff.x;
  helper.style.top = hmouseOff.y;
  mouseOff = getMouseOffset(tar,ev);
}
}
//监听事件
document.onmouseup = mouseUp;
document.onmousemove = mouseMove;
document.onmousedown = mouseDown;
window.onload=function(){
target = document.getElementById("image");
createContainer(target);
}
</script>
<div id="image" class="im"><div id="helper" class="drag">#dragHelper</div></div>
<div id="show"></div>
image.php代码:
复制PHP内容到剪贴板
PHP代码:

<?php
$path = $_GET['path'];
$x = $_GET['x'];
$y = $_GET['y'];
$img_name = rand(5, 15).".jpg"; 
$width = intval($_GET['width']);
$height = intval($_GET['height']);
list($owidth,$oheight) = getimagesize($path);
$n_image = imagecreatetruecolor($width,$height);
$image = imagecreatefromjpeg($path);
imagecopyresampled($n_image,$image,0,0,$x,$y,$owidth,$oheight,$owidth,$oheight);
imagejpeg($n_image,$img_name,100);
?>
<img src="<? echo $img_name ?>">

开始状态:
1.png (179.74 KB)
2006-12-18 13:32



鼠标移入目标图片状态:
2.png (180.05 KB)
2006-12-18 13:32



拖动剪切框状态:
3.png (175.15 KB)
2006-12-18 13:32



双击进行剪切图片状态:
4.png (188.54 KB)
2006-12-18 13:32



移动位置再次进行剪切图片状态(问题就发生在这里了,下面剪切出来的图片不会更新。。。):[attach]3579[/attach]

[ 本帖最后由 edwardhey 于 2007-1-26 10:31 编辑 ]

作者: edwardhey   发布时间: 2006-12-18

好长啊

作者: leehui1983   发布时间: 2006-12-18

:L 拷贝上来的时候代码好多空行 其实不长的;P

作者: edwardhey   发布时间: 2006-12-18

重新排下啊,这样大家不好阅读,好像不错的内容哦

作者: leehui1983   发布时间: 2006-12-18

哦   好的  不过我好像没有权限语法高亮;P

作者: edwardhey   发布时间: 2006-12-18

这个不用权限,把代码写在[php][/php]中间就可以了

作者: leehui1983   发布时间: 2006-12-18

;P OK了 麻烦大家帮忙看看~
小弟学习了

作者: edwardhey   发布时间: 2006-12-18

你脑袋进水了,用这个截图

作者: hobbs136   发布时间: 2006-12-19

:L

作者: leehui1983   发布时间: 2006-12-19

作者: xiaojia   发布时间: 2006-12-22

include('image_class.php');
image_class.php文件在哪里啊?源代码里没有提供

作者: insominia   发布时间: 2006-12-25

引用:
原帖由 insominia 于 2006-12-25 18:55 发表
include('image_class.php');
image_class.php文件在哪里啊?源代码里没有提供
不需要的  直接删了那行吧  ;P

作者: edwardhey   发布时间: 2006-12-26

:o

作者: leehui1983   发布时间: 2006-12-26

不错支持

作者: welefen   发布时间: 2006-12-27

每次切图的图片名不要一样,这样才能有效果


群号 18255508  大家一起来研究PHP一起工作

作者: PHP.CHINA   发布时间: 2007-01-25

;P 解决了之前出现的AJAX缓存问题 更新了

作者: edwardhey   发布时间: 2007-01-26

不错~~  感谢楼主~~

作者: 小竣   发布时间: 2007-01-28

5q的裁切效果特别好,希望有高手研究一下代码发上来...:lol

作者: airwin   发布时间: 2007-02-06

真的不错。学习了

作者: 绿竹居   发布时间: 2007-02-07

;P ;P ;P

作者: kenus   发布时间: 2007-02-07

复制PHP内容到剪贴板
PHP代码:
echo '没有进水,很不错哦';

作者: skyjhz   发布时间: 2007-02-18

:) 不知道有什么用??

作者: hui07   发布时间: 2007-02-18

复制PHP内容到剪贴板
PHP代码:
echo '十分感谢大家的支持';

作者: edwardhey   发布时间: 2007-03-05

最后切的部分不是很准
呵呵:)
计算的那个方法不对

x="+parseInt(cutC.style.left)

这样算不准

作者: Phzzy   发布时间: 2007-03-06

http://www.phzzy.org/blog/image-cut/

作者: Phzzy   发布时间: 2007-03-07

作者: Phzzy   发布时间: 2007-03-08

复制PHP内容到剪贴板
PHP代码:
<style>
#image{background-image:url(test1.jpg);width:1000px;height:200px;border:1px solid #000}
/*绝对定位很重要*/
#helper{position:absolute;width:100px;height:100px;border:1px solid #a9b53f;cursor:pointer;display:none;background-color:#999;top:30px;left:30px}
</style>
<script>
//目标源
var target;
//拖拽辅助容器
var helper;
//鼠标默认状态(false=没有按下)
var iMouseDown=false;
//当前的目标源
var ctar;
//鼠标偏移量
var mouseOff;
//ajax相关
var ajax;
//继承number类的NANA0,用途为:如果一个数为100px会返回100。
Number.prototype.NaN0=function(){return isNaN(this)?0:this;}
//初始化AJAX
function createRequest(){
var ajax;
if(window.ActiveXObject){
  try{
   ajax = new ActiveXObject("Microsoft.XMLHTTP");
  }catch(e){
   ajax = false;
  }
}else{
  try{
   ajax = new XMLHttpRequest();
  }catch(e){
   ajax = false;
  }
}
if(!ajax){
  alert("Error creating the XMLHttpRequest object.");
}else{
  return ajax;
}
}
//反送AJAX请求
function cutp(cutC){
ajax=createRequest();
ajax.onreadystatechange = action;
//发送请求的URL
url = "path=./test1.jpg&x="+parseInt(cutC.style.left)+"&y="+parseInt(cutC.style.top)+"&width="+parseInt(cutC.offsetWidth)+"&height="+parseInt
(cutC.offsetHeight);
window.status = url;
ajax.open("GET", "image.php?"+url, true);
ajax.send(null);
}
function action(){
var show = document.getElementById("show");
//如果SHOW这个容器原先有子节点,就清楚子节点
if(show.hasChildNodes()){
  show.removeChild(show.childNodes[0]);
}
//状态为4&200的时候返回信息
if(ajax.readyState==4&&ajax.status==200){
  show.innerHTML = ajax.responseText;
}
}
//创建可拖拽容器
function createContainer(arg){
helper = document.getElementById('helper');
//设置属性
helper.setAttribute("cut",1);
arg.onmouseover = function(){
  helper.style.display="block";
}
arg.onmouseout = function(){
  helper.style.display="none";
}
helper.ondblclick = function(){
  cutp(helper);
}
}
//获取鼠标位置
function mouseCoords(ev){
if(ev.pageX || ev.pageY){
  return {x:ev.pageX, y:ev.pageY};
}
return {
  x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
  y:ev.clientY + document.body.scrollTop  - document.body.clientTop
};
}

//获取鼠标在当前容器的偏移量
function getMouseOffset(target, ev){
ev = ev || window.event;
var docPos    = getPosition(target);
var mousePos  = mouseCoords(ev);
return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}
//获取鼠标相对父节点的偏移量
function getPosition(e){
var left = 0;
var top  = 0;
while (e.offsetParent){
  left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
  top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
  e     = e.offsetParent;
}
left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
return {x:left, y:top};
}
//鼠标移动处罚的函数
function mouseMove(ev){
ev = ev||window.event;
var tar = ev.target||ev.srcElement;
var mousePos = mouseCoords(ev);
var rootar = tar.parentNode;
var mouseOf = getPosition(rootar);
//判断状态
if(iMouseDown&&mouseOff){
  var limLefX=mouseOf.x+rootar.offsetWidth-tar.offsetWidth;
  var limBottomY =mouseOf.y+rootar.offsetHeight-tar.offsetHeight;
  var conLeft = mousePos.x-mouseOff.x;
  var conTop = mousePos.y-mouseOff.y;
  if(conLeft>=mouseOf.x&&conLeft<=limLefX){
   helper.style.left = mousePos.x-mouseOff.x;
  }
  if(conTop>=mouseOf.y&&conTop<=limBottomY){
   helper.style.top = mousePos.y-mouseOff.y;
  }
}
}

//鼠标按键起来的函数
function mouseUp(){
iMouseDown = false;
}

//按下鼠标按键的函数
function mouseDown(ev){
iMouseDown = true;
ev = ev||window.event;
var tar = ev.target||ev.srcElement;
if(tar.getAttribute("cut")){
  var hmouseOff = getPosition(tar);
  helper.style.left = hmouseOff.x;
  helper.style.top = hmouseOff.y;
  mouseOff = getMouseOffset(tar,ev);
}
}
//监听事件
document.onmouseup = mouseUp;
document.onmousemove = mouseMove;
document.onmousedown = mouseDown;
window.onload=function(){
target = document.getElementById("image");
createContainer(target);
}
</script>
<div id="image" class="im"><div id="helper" class="drag">#dragHelper</div></div>
<div id="show"></div>

作者: heixiake   发布时间: 2007-03-14

这个东东是好东东顶上这东东好东

作者: 淘园君   发布时间: 2007-03-15

关注一下字

作者: k1ng   发布时间: 2007-03-15

:L

作者: 特蓝克斯   发布时间: 2007-03-18

作者: remote_addr   发布时间: 2007-03-20

好东西谢谢分享成果

作者: dandankai   发布时间: 2007-04-16

好,学习下,,,,厉害哦

作者: wangxin29   发布时间: 2007-04-16

正好用来学习。

支持下!

作者: xiaoqiang527   发布时间: 2007-05-05

不错,正需要

作者: sanler   发布时间: 2007-05-27

作者: lxydyx   发布时间: 2008-07-31