| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- <?php
- /**
- gd2库图片处理,添加水印
-
- */
- class imageChajian extends Chajian
- {
- public $ext; //图片类型
- public $img; //图片对象
- public $mime; //图片对象
- public $path; //图片地址
- public $w = 0;
- public $h = 0;
- public $bool = false;
- public $size = 0;
- public $whbili = 0;//高和宽的比例
-
-
- protected function initChajian()
- {
- $this->bool = function_exists('ImageCreate');
- }
-
- /**
- 创建图片对象$rotate旋转角度
-
- */
- public function createimg($path,$rotate=0)
- {
- if(!$this->bool)return false;
- $this->bool = false;
- if(!file_exists($path))return false;
-
- $this->ext = $this->getext($path);
- $this->path = $path;
- $img = $this->createimgobj($path);
- $this->img = $img;
- if(!$img)return false;
- //判断是否旋转
- if($rotate != 0 && $rotate<360 && $rotate>-360){
- $white = $this->color('#ffffff',$img);
- $img = imagerotate($img, $rotate, $white);//旋转
- }
-
-
- $this->w = imagesx($this->img);
- $this->h = imagesy($this->img);
- $this->size = ceil(filesize($this->path)/1024);
- $this->whbili = $this->w/$this->h;
- $this->bool = true;
- }
-
-
-
- /**
- 获取图片对象
- */
- public function createimgobj($path)
- {
- $ext = $this->getmime($path);
- $img = false;
- switch ($ext){
- case 'image/gif':
- $img=imagecreatefromgif($path);
- break;
- case 'image/png':
- $img=imagecreatefrompng($path);
- break;
- default:
- $img=imagecreatefromjpeg($path);
- break;
- }
- return $img;
- }
-
- public function conver($opath, $npath)
- {
- if(!file_exists($opath))return;
- $img = $this->createimgobj($opath);
- $this->saveas($npath, $img);
- }
-
- /**
- 获取图片的格式
- */
- public function getext($img_name)
- {
- $type = strtolower(substr($img_name,strrpos($img_name,'.')+1));
- return $type;
- }
-
- public function getmime($img_name)
- {
- $mime = '';
- if(file_exists($img_name)){
- $fileobj = getimagesize($img_name);
- $mime = strtolower($fileobj['mime']);
- $this->mime = $mime;
- }
- return $mime;
- }
-
- /**
- 添加文字水印
- $str 添加文字
- */
- public function addwater($str,$color='#000000',$size=5,$align='lt')
- {
- if(!$this->bool)return;
- $font = 'arial.ttf';
- $lw = strlen($str)*($size);
- $lh = $size*1.5;
- $color = $this->color($color,$this->img);
- $x = 2;
- $y = 2;
- switch($align){
- case 'rb'://右下角
- $x = $this->w - $lw-2;
- $y = $this->h - $lh-2;
- break;
- case 'tr'://右上角
- $x = $this->w - $lw-2;
- break;
- case 'lb'://左下角
- $y = $this->h - $lh-2;
- break;
- case 'cn'://居中
- $x = ($this->w - $lw) * 0.5;
- $y = ($this->h - $lh) * 0.5;
- break;
- }
- //imagettftext($this->img, $size,0, $x, $y, $color, $font, $str);
- imagestring($this->img, $size, $x, $y, $str, $color);
- $sapath = str_replace('.'.$this->ext.'', '_water.'.$this->ext.'', $this->path);
- $sapath = $this->path;
- $this->saveas($sapath, $this->img);//另存为
- }
-
- /**
- 添加图片水印
- @params $align 图片位置
- */
- public function imgwater($imgpath,$align='rb')
- {
- if(!$this->bool || !file_exists($imgpath))return;
- list($lw, $lh) = getimagesize($imgpath);
- $logoimg = $this->createimgobj($imgpath);
- $x = 2;
- $y = 2;
- switch($align){
- case 'rb'://右下角
- $x = $this->w - $lw-2;
- $y = $this->h - $lh-2;
- break;
- case 'tr'://右上角
- $x = $this->w - $lw-2;
- break;
- case 'lb'://左下角
- $y = $this->h - $lh-2;
- break;
- case 'cn'://居中
- $x = ($this->w - $lw) * 0.5;
- $y = ($this->h - $lh) * 0.5;
- break;
- }
- imagecopymerge($this->img, $logoimg, $x ,$y ,0 ,0 ,$lw ,$lh, 100);
- $this->saveas($this->path, $this->img);
- }
-
- /**
- 创建颜色
- */
- public function color($color,$img)
- {
- if(!empty($color)&&(strlen($color)==7)){
- $r=hexdec(substr($color,1,2));
- $g=hexdec(substr($color,3,2));
- $b=hexdec(substr($color,5));
- }else{
- $r=$g=$b='00';
- }
- return imagecolorallocate($img, $r, $g, $b);
- }
-
-
- public function colorTorgb($color)
- {
- if(!empty($color)&&(strlen($color)==7)){
- $r=hexdec(substr($color,1,2));
- $g=hexdec(substr($color,3,2));
- $b=hexdec(substr($color,5));
- }else{
- $r=$g=$b='00';
- }
- return array($r, $g, $b);
- }
-
- public function colorToHsl($color)
- {
- $rgba = $this->colorTorgb($color);
- $r = floatval($rgba[0])/255;
- $g = floatval($rgba[1])/255;
- $b = floatval($rgba[2])/255;
- $rgb = array($r, $g, $b);
- $max = max($rgb);
- $min = min($rgb);
- $diff = $max - $min;
- if ($max == $min) {
- $h = 0;
- } else if ($max == $r && $g >= $b) {
- $h = 60 * (($g - $b) / $diff);
- } else if ($max == $r && $g < $b) {
- $h = 60 * (($g - $b) / $diff) + 360;
- } else if ($max == $g) {
- $h = 60 * (($b - $r) / $diff) + 120;
- } else if ($max == $b) {
- $h = 60 * (($r - $g) / $diff) + 240;
- }
- $l = ($max + $min) / 2;
- if ($l == 0 || $max == $min) {
- $s = 0;
- } else if (0 < $l && $l <= 0.5) {
- $s = $diff / (2 * $l);
- } else if ($l > 0.5) {
- $s = $diff / (2 - 2 * $l);
- }
- return array($h, round($s*100,2), round($l*100,2));
- }
-
- /**
- 注销图片
- */
- private function destroy()
- {
- imagedestroy($this->img);
- }
-
- /**
- 另存图片
- */
- private function saveas($spath,$img)
- {
- $ext = $this->getmime($spath);
- $this->saveass($ext, $img, $spath);
- }
- private function saveass($ext,$img, $spath)
- {
- switch($ext){
- case 'image/gif':
- imagegif($img,$spath);
- break;
- case 'image/png':
- imagepng($img,$spath);
- break;
- case 'image/bmp':
- imagewbmp($img,$spath);
- break;
- default:
- imagejpeg($img,$spath,80);
- break;
- }
- }
-
- /**
- * 压缩图片
- */
- public function compress($w,$h)
- {
- if(!$this->bool)return '';
- $bili = 1;
- $nh = $h;
- $nw = $w;
- if($w < $this->w){
- $bili = $w / $this->w;
- $nh = $bili * $this->h;
- }
- if($h>0 && $nh > $h){
- $bili = $h / $this->h;
- $nh = $h;
- $nw = $bili * $this->w;
- }
- if($bili==1)return '';
- $yspath = str_replace('.'.$this->ext.'', 'y.'.$this->ext.'', $this->path);
- return $this->thumbnail($nw, $nh, 0, $yspath);
- }
-
- /**
- 图片缩略图
- @param $w 宽
- @param $h 高
- */
- public function thumbnail($w,$h,$lx=0, $sapath='')
- {
- if(!$this->bool)return '';
- list($mw, $mh, $bili) = $this->imgwh($w,$h);
- $tmpimg = imagecreatetruecolor($w,$h);
- imagefill($tmpimg,0,0,$this->color('#ffffff',$tmpimg));
- $tx = 0;
- $ty = 0;
-
- //开始截的位置
- $sx = 0;
- $sy = 0;
-
- if($w > $mw){
- if($lx==1){//整图缩略可以看到白边
- $tx = ($w-$mw)/2;
- }else if($lx == 0){//可能去掉看不到的
- $mw = $w;
- $mh = $mw/$this->whbili;
- $nbl= $mh/$this->h;
- $sy = ($mh-$h)/2/$nbl; //当前缩放比例
- }
- }
- if($h > $mh){
- if($lx==1){
- $ty = ($h-$mh)/2;
- }else if($lx == 0){
- $mh = $h;
- $mw = $mh*$this->whbili;
- $nbl= $mw/$this->w;
- $sx = ($mw-$w)/2/$nbl; //当前缩放比例
- }
- }
- //imagecopyresized
- imagecopyresampled($tmpimg, $this->img, $tx,$ty, $sx,$sy, $mw,$mh,$this->w,$this->h);//生成缩略图
- //$sapath = str_replace('.'.$this->ext.'', '_thumb'.$w.'x'.$h.'.'.$this->ext.'', $this->path);
- if($sapath=='')$sapath = str_replace('.'.$this->ext.'', '_s.'.$this->ext.'', $this->path);
- $this->saveass($this->mime ,$tmpimg, $sapath);//保存图片
- return $sapath;
- }
-
- /**
- 图片显示宽高
- */
- public function imgwh($mw,$mh)
- {
- $w = $this->w;
- $h = $this->h;
- $bili=1;
- if($w>$mw){
- $bili=($mw/$w);
- $h=$bili*$h;
- $w=$mw;
- }
- if($h>$mh){
- $bili=($mh/$this->h);
- $w=$bili*$this->w;
- $h=$mh;
- }
- return array($w,$h,$bili);
- }
- }
|