php+ajax剪切图片

 更新时间:2016年11月25日 16:31  点击:1733

<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>


<?php

class ZipAllFloder
{
    var 
$cachelist 
= array();
    var 
$datasec      
= array();  
    var 
$ctrl_dir     
= array();  
    var 
$eof_ctrl_dir "\x50\x4b\x05\x06\x00\x00\x00\x00"
;  
    var 
$old_offset   0
;  
    
    function 
StartWork($dir
){
        
$result $this->GetList($dir
);
        
$this->ClearCache
();
        return 
$result
;
    } 
    function 
ReadAndExport($filelist,$zipfilename
){  
        if (
count($filelist)>0
){  
            foreach(
$filelist as $filename
){  
                if (
is_file($filename
)){  
                    
$fp fopen ($filename"r"
);  
                    
$content = @fread ($fp,filesize($filename
));  
                    
fclose ($fp
);  
                    
$filename basename($filename
);  
                    
$this -> addFile($content$filename
);  
                }  
            }  
        }else{
            
$this -> addFile("This folder have none a single file!","nofile.log"
);
        }
        
$out $this -> outfile
(); 
        
$this -> IniVars
();
        
$fp fopen($zipfilename,"w"
);  
        
fwrite($fp,$out,strlen($out
));  
        
fclose($fp
);
        
$this -> cachelist[] = $zipfilename

    }
    function 
GetList($dir
){  
        if (
file_exists($dir
)){  
            
$handle opendir($dir
); 
            while(
$files readdir($handle
)){  
                if ((
$files==".")||($files==".."
)) continue; 
                if(
is_dir($dir."/".$files
)){
                    
$this -> GetList($dir."/".$files
);
                }else{
                    
$filelist[] = $dir."/".$files

                } 
            }  
            
closedir($handle
);
            
$zipfilename dirname($dir)."/[FOLDER]".basename($dir).".zip"
;
            
$this -> ReadAndExport($filelist,$zipfilename
);
        }  
        return 
$zipfilename
;  
    }  
    function 
ClearCache
(){
        if(
$num count($this ->cachelist
)){
            for(
$i=0;$i<$num-1;$i
++){
                @
unlink($this ->cachelist[$i
]);
            }
        }
    }
    function 
IniVars
(){
        
$this -> datasec 
= array();
        
$this -> ctrl_dir 
= array();
        
$this -> eof_ctrl_dir "\x50\x4b\x05\x06\x00\x00\x00\x00"
;
        
$this -> old_offset   0
;
    }
    function 
unix2DosTime($unixtime 0
) {  
        
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime
);  
        if (
$timearray['year'] < 1980
) {  
            
$timearray['year']    = 1980
;  
            
$timearray['mon']     = 1
;  
            
$timearray['mday']    = 1
;  
            
$timearray['hours']   = 0
;  
            
$timearray['minutes'] = 0
;  
            
$timearray['seconds'] = 0
;  
        }
        return ((
$timearray['year']-1980)<<25)|($timearray['mon']<<21)|($timearray['mday']<<16)|($timearray['hours']<<11)|($timearray['minutes']<<5)|($timearray['seconds']>>1
);  
    }
    function 
addFile($data$name$time 0
){  
        
$name str_replace('\\''/'$name
);  
        
$dtime dechex($this->unix2DosTime($time
));  
        
$hexdtime '\x' $dtime[6] . $dtime[7
]  
                  . 
'\x' $dtime[4] . $dtime[5
]  
                  . 
'\x' $dtime[2] . $dtime[3
]  
                  . 
'\x' $dtime[0] . $dtime[1
];  
        eval(
'$hexdtime = "' $hexdtime '";'
);  
        
$fr   "\x50\x4b\x03\x04"
;  
        
$fr   .= "\x14\x00"
;
        
$fr   .= "\x00\x00"
;
        
$fr   .= "\x08\x00"
;
        
$fr   .= $hexdtime

        
$unc_len strlen($data
);  
        
$crc     crc32($data
);  
        
$zdata   gzcompress($data
);  
        
$c_len   strlen($zdata
);  
        
$zdata   substr(substr($zdata0strlen($zdata) - 4), 2
);
        
$fr      .= pack('V'$crc
);
        
$fr      .= pack('V'$c_len
);
        
$fr      .= pack('V'$unc_len
);
        
$fr      .= pack('v'strlen($name
));
        
$fr      .= pack('v'0
);
        
$fr      .= $name
;  
        
$fr .= $zdata
;  
        
$fr .= pack('V'$crc
);
        
$fr .= pack('V'$c_len
);
        
$fr .= pack('V'$unc_len
);
        
$this -> datasec[] = $fr
;  
        
$new_offset        strlen(implode(''$this->datasec
));  
        
$cdrec "\x50\x4b\x01\x02"
;  
        
$cdrec .= "\x00\x00"
;
        
$cdrec .= "\x14\x00"
;
        
$cdrec .= "\x00\x00"
;
        
$cdrec .= "\x08\x00"
;
        
$cdrec .= $hexdtime
;
        
$cdrec .= pack('V'$crc
);
        
$cdrec .= pack('V'$c_len
);
        
$cdrec .= pack('V'$unc_len
);
        
$cdrec .= pack('v'strlen($name
) );
        
$cdrec .= pack('v'
);
        
$cdrec .= pack('v'
);
        
$cdrec .= pack('v'
);
        
$cdrec .= pack('v'
);
        
$cdrec .= pack('V'32 
);
        
$cdrec .= pack('V'$this -> old_offset 
);
        
$this -> old_offset $new_offset
;  
        
$cdrec .= $name
;  
        
$this -> ctrl_dir[] = $cdrec
;  
    }
    function 
outfile
(){  
        
$data    implode(''$this -> datasec
);  
        
$ctrldir implode(''$this -> ctrl_dir
);  
        return  
            
$data 
.  
            
$ctrldir 
.  
            
$this -> eof_ctrl_dir 
.  
            
pack('v'sizeof($this -> ctrl_dir
)) .
            
pack('v'sizeof($this -> ctrl_dir
)) .
            
pack('V'strlen($ctrldir
)) .
            
pack('V'strlen($data
)) .
            
"\x00\x00"
;
    }
}

$zip = new ZipAllFloder
();
$str $zip->StartWork("./baby"
);
echo 
$str
;
?>

先来看看效果图吧:

下面我们来看看php怎么样实现绘图这个功能的.

<?php
/***
  * @project Bar Graph Program
  * @license GPL
  * @package
  * @file GrapBar.php
  * @date 2007-4-3
  * @version 1.0
  * @last modified
 
  * 定义 柱状图(柱形图) 类
  *
  * 注意,使用前请确保字体路径存在并允许访问,如果出错,还要检查在php.ini配置中的open_basedir项,如果没此路径请添加,或在程序中设置包含
  *
  * 智能化的柱状图程序,用于报表等
  *
  ***/
 
define("DEFAULT_FONT_PATH", "c:/windows/fonts/simhei.ttf");
class SingleBar
{
 private $_x;
 private $_y;
 private $_h;
 public $_l = 50;
 private $_w = null;
 private $_srcPoints = array();
 private $_points = array();
 
 public function __construct($x, $y, $h, $l = 50, $w = null)
 {
  $this->_x = $x;
  $this->_y = $y;
  $this->_h = $h;
  $this->_l = $l;
  $this->_w = $w;
  $this->_srcPoints = $this->getSrcPoints();
  $this->_points = $this->getPoints();
 }
 
 public function getSrcPoints()
 {
  return array(
   array($this->_x                 , $this->_y),
   array($this->_x+$this->_l       , $this->_y),
   array($this->_x+(1.35*$this->_l), $this->_y-(0.35*$this->_l)),
   array($this->_x+(0.35*$this->_l), $this->_y-(0.35*$this->_l)),
   array($this->_x                 , $this->_y+$this->_h),
   array($this->_x+$this->_l       , $this->_y+$this->_h),
   array($this->_x+(1.35*$this->_l), $this->_y+$this->_h-(0.35*$this->_l))
  );
 }
 
 public function getPoints()
 {
  $points = array();
  foreach($this->_srcPoints as $key => $val)
  {
   $points[] = $val[0];
   $points[] = $val[1];
  }
  return $points;
 }
 
 public function getTopPoints()
 {
  return array_slice($this->_points, 0, 8); //顶坐标
 }
 
 public function getBelowPoints()
 {
  return array_merge(array_slice($this->_points, 0, 2), array_slice($this->_points, 8, 4), array_slice($this->_points, 2, 2)); //下坐标
 }
 
 public function getRightSidePoints()
 {
  return array_merge(array_slice($this->_points, 2, 2), array_slice($this->_points, 10, 4), array_slice($this->_points, 4, 2)); //右侧坐标
 }
 
 public function draw($image, $topColor, $belowColor, $sideColor, $borderColor = null, $type = 'LEFT')
 {
  if (is_null($borderColor))
  {
   $borderColor = 0xcccccc;
  }
  
  $top_rgb = $this->getRGB($topColor);
  $below_rgb = $this->getRGB($belowColor);
  $side_rgb = $this->getRGB($sideColor);
  $top_color = imagecolorallocate($image, $top_rgb['R'], $top_rgb['G'], $top_rgb['B']);
  $below_color = imagecolorallocate($image, $below_rgb['R'], $below_rgb['G'], $below_rgb['B']);
  $side_color = imagecolorallocate($image, $side_rgb['R'], $side_rgb['G'], $side_rgb['B']);
  
  imagefilledpolygon($image, $this->getTopPoints(), 4, $top_color); //画顶面
  imagepolygon($image, $this->getTopPoints(), 4, $borderColor); //画顶面边线
  
  imagefilledpolygon($image, $this->getBelowPoints(), 4, $below_color); //画下面
  imagepolygon($image, $this->getBelowPoints(), 4, $borderColor); //画下面边线
  
  if ($type == 'LEFT')
  {
   imagefilledpolygon($image, $this->getRightSidePoints(), 4, $side_color); //画右侧面
   imagepolygon($image, $this->getRightSidePoints(), 4, $borderColor); //画侧面边线
  } 
 }
 
 public function getRGB($color)
 {
  $ar = array();
  $color = hexdec($color);
  $ar['R'] = ($color>>16) & 0xff;
  $ar['G'] = ($color>>8) & 0xff;
  $ar['B'] = ($color) & 0xff;
  return $ar;
 }
}

class Bar
{
 private $_W;
 private $_H;
 private $_bgColor = "ffffff";
 private $_barHeights = array();
 private $_barTexts = array();
 private $_barColors = array();
 public $_title;
 public $_paddingTop = 30;
 public $_paddingBottom = 100;
 public $_paddingLeft = 45;
 public $_paddingRight = 2;
 public $_barL = 50;
 public $image;
 
 public function __construct($imgW, $imgH, $barHeights, $barTexts = null, $barColors = null)
 {
  $this->_W = $imgW;
  $this->_H = $imgH;
  $this->_barHeights = $barHeights;
  $this->_barTexts   = $barTexts;
  $this->_barColors  = $barColors;
  $this->_paddingBottom = $this->resetPaddingBottom();
  $this->_H = $this->resetHeight();
  $this->image = imagecreatetruecolor($this->_W, $this->_H);
 }
 
 public function stroke()
 {
  $this->drawBg();
  $this->drawBars();
  $this->drawTitle();
  $this->drawLables();
  ob_start();
  //header("Content-type: image/png");
  //imagepng($this->image);
  header("Content-type: " . image_type_to_mime_type(IMAGETYPE_JPEG));
        imagejpeg($this->image);
  imagedestroy($this->image);
 }
 
 public function drawBg()
 {
  $img_w = $this->_W;
  $img_h = $this->_H;
  $paddingTop    = $this->_paddingTop;
  $paddingBottom = $this->_paddingBottom;
  $paddingLeft   = $this->_paddingLeft;
  $paddingRight  = $this->_paddingRight;
  $rgb = $this->getRGB($this->_bgColor);
  $bg = imagecolorallocate($this->image,$rgb['R'], $rgb['G'], $rgb['B']);
  imagefilledrectangle($this->image, 0, 0, $img_w, $img_h, $bg);
  $side_bg = imagecolorallocatealpha($this->image, 220, 220, 220, 75);
  $side_bg2 = imagecolorallocate($this->image, 220, 220, 220);
  $border_color = imagecolorallocate($this->image, 190, 190, 190);
  $line_color = imagecolorallocate($this->image, 236, 236, 236);
  $dial_color = imagecolorallocate($this->image, 131, 131, 131);
  
  $x1 = $paddingLeft;
  $y1 = $paddingTop;
  $x2 = $img_w - $paddingRight;
  $y2 = $img_h - $paddingBottom;
  imagerectangle($this->image, $x1, $y1, $x2, $y2, $border_color);
  imagefilledpolygon($this->image, array($x1-5,$y1+10, $x1-5,$y2+10,  $x1,$y2,  $x1,$y1), 4, $side_bg);
        imagepolygon($this->image, array($x1-5,$y1+10, $x1-5,$y2+10,  $x1,$y2,  $x1,$y1), 4, $border_color);
  imagefilledpolygon($this->image, array($x1-5,$y2+10, $x2-5,$y2+10,  $x2,$y2,  $x1,$y2), 4, $side_bg);
        imagepolygon($this->image, array($x1-5,$y2+10, $x2-5,$y2+10,  $x2,$y2,  $x1,$y2), 4, $border_color);
  imageline($this->image, $x1, $y2, $x2, $y2, $side_bg2);
  
  $total_h = $img_h - $paddingTop - $paddingBottom;
  $every_h = $total_h/11;
  for($i=1; $i<=10; $i++)
  {
   imageline($this->image, $x1, $y1+($every_h*$i), $x2, $y1+($every_h*$i), $line_color); //画网线
  }
  
  $max_h = max($this->_barHeights);
  for($i=1; $i<=10; $i++)
  {
   $value = $max_h - (($max_h/10)*($i-1));
   $value = strval($value);
   $str_w = strlen($value)*5;
   imageline($this->image, $x1-5-3, $y1+10+($every_h*$i), $x1-3+1, $y1+10+($every_h*$i), $dial_color); //画刻度线
   imagestring($this->image, 3, $x1-5-3-$str_w-1, $y1+10+($every_h*$i)-5, $value, 0x000000);
  }
 }
 
 
 public function drawBars()
 {
  $counts = count($this->_barHeights);
  if (empty($this->_barColors))
  {
   $color = $this->setColor();
   $this->_barColors = array_slice($color, 0, $counts);
   //shuffle($this->_barColors);
  }
  $every_w = ($this->_W - $this->_paddingLeft - $this->_paddingRight)/$counts; //每一段宽
  $barL = $every_w;
  $barL = ($barL > $this->_barL*1.35+6) ? $this->_barL : $barL/1.35 - 6;
  $max_h = max($this->_barHeights);
  $ruler_h = $this->_H - $this->_paddingTop - $this->_paddingBottom; //标尺总高度
  $stander_h = $ruler_h - ($ruler_h/11); //标尺10等分的高度
  $i = 0;
  foreach ($this->_barHeights as $val)
  {
   $h = ($stander_h/$max_h)*$val;
   $x = $this->_paddingLeft + ($every_w*$i) + (($every_w - ($barL*1.35))/2);;
   $y = $this->_H - $this->_paddingBottom + 10 - $h;
   //$t_color = $this->_barColors[$i];
   $b_color = $this->_barColors[$i];
   //$s_color = $this->_barColors[$i];

   
   $rgb = $this->getRGB($this->_barColors[$i]);
   $R = $rgb['R'] * 0.7;
   $G = $rgb['G'] * 0.7;
   $B = $rgb['B'] * 0.7;
   
   $c1 = $R > 0 ? dechex($R) : '00';
   $c2 = $G > 0 ? dechex($G) : '00';
   $c3 = $B > 0 ? dechex($B) : '00';

   $t_color = $b_color;
   $s_color = $c1. $c2 . $c3;

   $SingleBar = new SingleBar($x, $y, $h, $barL);
   $SingleBar->draw($this->image, $t_color, $b_color, $s_color);
   $i++;
  }
 }
 
 public function drawTitle()
 {
  if (empty($this->_title))
  {
   return;
  }
  $font = 5;
  $font_w = imagefontwidth($font);
  $len = strlen($this->_title);
  $x = ($this->_W + $this->_paddingLeft - $this->_paddingRight)/2;
  $x -= ($len*$font_w)/2;
  $y = ($this->_paddingTop - $font_w)/2 + 12;
  //imagestring($this->image, $font, $x, $y, $title, 0x000000);
  imagettftext($this->image, 12, 0, $x, $y, 0x000000, DEFAULT_FONT_PATH, $this->_title);
 }
 
 public function drawLables()
 {
  $x1 = $this->_paddingLeft - 5;
  $y1 = $this->_H - $this->_paddingBottom + 20;
  $x2 = $this->_W - $this->_paddingRight;
  $y2 = $this->_H - 10;
  //imagefilledrectangle($this->image, $x1, $y1, $x2, $y2, 0xffffff);
  imagerectangle($this->image, $x1, $y1, $x2, $y2, 0x000000);
  $space = 5;
  $x = $x1 + 3;
  $y = $y1 + 3;
  foreach ($this->_barTexts as $key => $val)
  {
   $color = $this->_barColors[$key];
   $rgb = $this->getRGB($color);
   $bg = imagecolorallocate($this->image,$rgb['R'], $rgb['G'], $rgb['B']);
   imagefilledrectangle($this->image, $x, $y, $x+12, $y+12, $bg); //绘12*12的矩形
         imagerectangle($this->image, $x, $y, $x+12, $y+12, 0x000000); //绘12*12的矩形框
   imagettftext($this->image, 12, 0, $x+12+3, $y+12, 0x000000, DEFAULT_FONT_PATH, $val);
   $x += 12 + $space + (strlen($val)*8) + $space;
   if ($x + (strlen($val)*8) >= $this->_W - $this->_paddingLeft - $this->_paddingRight)
   {
    $x = $x1 + 3;
    $y = $y + 12 + 3;
   }
  }
 }
 
 public function resetPaddingBottom()
 {
  $ruler_w = $this->_W - $this->_paddingLeft - $this->_paddingRight;
  $label_w = $this->getLableTotalWidth();
  $lines = ceil($label_w / $ruler_w);
  $h = 12 * $lines + (3 * ($lines + 1)) + 30;
  return $h;
 }
 
 public function resetHeight()
 {
  $padding_bottom = $this->resetPaddingBottom();
  if ($this->_H - $padding_bottom < 222)
  {
   return 222 + $padding_bottom;
  }
  return $this->_H;
 }

 
 public function getLableTotalWidth()
 {
  $counts = count($this->_barTexts);
  $space = 5;
  $total_len = 0;
  foreach ($this->_barTexts as $val)
  {
   $total_len += strlen($val);
  }
  
  $tx_w = ($total_len * 9) + ((12 + 3 + $space) * $counts);
  return $tx_w;
 }
 
 public function setBg($color)
 {
  $this->_bgColor = $color;
 }
 
 public function setTitle($title)
 {
  $this->_title = $title;
 }
 
 public function setColor()
 {
  $ar = array('ff', '00', '33', '66', '99', 'cc');
  $color = array();
  for ($i=0; $i<6; $i++)
  {
   for ($j=0; $j<6; $j++)
   {
    for($k=0; $k<6; $k++)
    {
     $color[] = $ar[$i] . $ar[$j] . $ar[$k];
    }
   }
  }
  
  $color2 = array();
  for ($i=1; $i<216; $i += 4)
  {
   $color2[] = $color[$i];
  }

  return $color2;
 }
 
 public function getRGB($color)
 {
  $ar = array();
  $color = hexdec($color);
  $ar['R'] = ($color>>16) & 0xff;
  $ar['G'] = ($color>>8) & 0xff;
  $ar['B'] = ($color) & 0xff;
  return $ar;
 }
}

/***/
$bar = new Bar(500, 300, array(600, 300, 30, 500, 400, 250, 350, 360), array('AAAAA', 'BBBBB', 'CCCCC', 'DDDDD', 'EEEEEE', 'FFFFFF', 'GGGGGGG', 'HHHHHHHHH'));
$bar->setTitle('打造完美柱状图!');
$bar->stroke();
/***/
?>

<?php
# Constants
define("IMAGE_BASE", './');
define("MAX_WIDTH", 150);
define("MAX_HEIGHT", 150);

# Get image locationstr_replace('..', '', $_SERVER['QUERY_STRING']);
$image_file = 't.jpg';
$image_path = IMAGE_BASE . "$image_file";

# Load image
$img = null;
$ext = strtolower(end(explode('.', $image_path)));
if ($ext == 'jpg' || $ext == 'jpeg') {
     $img = imagecreatefromjpeg($image_path);
} else if ($ext == 'png') {
     $img = @imagecreatefrompng($image_path);
# Only if your version of GD includes GIF support
} else if ($ext == 'gif') {
     $img = @imagecreatefrompng($image_path);
}

# If an image was successfully loaded, test the image for size
if ($img) {

     # Get image size and scale ratio
     $width = imagesx($img);
     $height = imagesy($img);
     $scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height);

     # If the image is larger than the max shrink it
     if ($scale < 1) {
         $new_width =150; //floor($scale*$width);
         $new_height =150;// floor($scale*$height);

         # Create a new temporary image
         $tmp_img = imagecreatetruecolor($new_width, $new_height);

         # Copy and resize old image into new image
         imagecopyresized($tmp_img, $img, 0, 0, 0, 0,$new_width, $new_height, $width, $height);
         imagedestroy($img);
         $img = $tmp_img;
     }
}

# Create error image if necessary
if (!$img) {
     $img = imagecreate(MAX_WIDTH, MAX_HEIGHT);
     imagecolorallocate($img,0,0,0);
     $c = imagecolorallocate($img,70,70,70 );
     imageline($img,0,0,MAX_WIDTH,MAX_HEIGHT,$c2);
     imageline($img,MAX_WIDTH,0,0,MAX_HEIGHT,$c2);
}

# Display the image
header("Content-type: image/jpeg");
imagejpeg($img);
imagedestroy($img);
?>

 

以前在奥索看见过很多这样的例子,各各方法复杂,请看如下例子实现图形计数器。在网页中使用请用 <script src="http://文件地址"></script>

<?
//存放计数的文本文件
$count="count.txt";
//计数器的位数,假如不填则默认为6位
$wei="";
//图像的URL路径
$tu="/tcount/images";
?>
<?
if ($wei=="") { $wei=6; }
if (!file_exists($count)) { $fp=fopen($count,"w "); fputs($fp,0,100); fclose($fp); }
if ($REMOTE_ADDR!=$ip) {
$fp=fopen($count,"r ");
$cc=fgets($fp,100);
$cc=trim($cc);
if ($cc=="") { $cou=1; }
else { $cou=$cc 1; }
rewind($fp);
fputs($fp,$cou,100);
fclose($fp);
}
setcookie("ip",$REMOTE_ADDR,time() 86400);
$fp=fopen($count,"r ");
$cou=fgets($fp,100);
$cou=trim($cou);
fclose($fp);
$w=strlen($cou);
while($w<$wei) {
$cou="0".$cou;
$w ;
}
$www=strlen($cou);
$i=0;
echo "document.write("<p align=center>");n";
while($i<$www) {
$ym=substr($cou,$i,1);
echo "document.write("<img src=$tu/$ym.gif>");n";
$i ;
}
?>

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Photoshop古装美女图片转为工笔画效果制作教程

    今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • js实现上传图片及时预览

    这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
  • Photoshop枪战电影海报图片制作教程

    Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
  • python opencv通过4坐标剪裁图片

    图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
  • vue.js 表格分页ajax 异步加载数据

    Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
  • 使用PHP下载CSS文件中的图片的代码

    共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
  • jquery Ajax实现Select动态添加数据

    这篇文章主要为大家详细介绍了jquery Ajax实现Select动态添加数据的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-06-15
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • PHP swfupload图片上传的实例代码

    PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
  • ps怎么制作图片阴影效果

    ps软件是现在很多人比较喜欢的,有着非常不错的使用效果,这次文章就给大家介绍下ps怎么制作图片阴影效果,还不知道制作方法的赶紧来看看。 ps图片阴影效果怎么做方法/...2017-07-06
  • C#中图片旋转和翻转(RotateFlipType)用法分析

    这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25
  • OpenCV如何去除图片中的阴影的实现

    这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29
  • JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法

    这篇文章主要介绍了JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法,涉及JavaScript页面元素定时滚动操作及ajax调用实现技巧,需要的朋友可以参考下...2016-04-19
  • JavaScript 如何禁止用户保存图片

    这篇文章主要介绍了JavaScript 如何禁止用户保存图片,帮助大家完成需求,更好的理解和使用JavaScript,感兴趣的朋友可以了解下...2020-11-19