介绍
介绍
福哥今天要给TFPHP框架添加一个新的对象,就是用来加工图片的工具对象TFImage。一般情况下,在做web开发的时候会有很多场合需要对用户上传的图片进行加工处理,常有的加工操作有缩小、旋转、裁剪、加水印、写文字等等。在PHP里面如果要对图片进行加工处理的话就需要用到GD扩展库了,这个GD扩展库在我们的TFLinux里面已经安装好了,可以直接使用了。
前面说过了,加工图片的操作有很多,福哥会一点一点地逐个实现它们。
今天福哥会先实现TFImage的其中一个操作,就是“中心裁剪”法对图片进行裁剪处理。所谓“中心裁剪”就是在保证最终宽、高尺寸的前提下将原图的中心进行最大限度地保留,然后将其余的部分裁剪掉。
TFImage
a
private function a(int $a,int $b){ $c=$a/$this->a; $d=$b/$this->b; if($b/$c<=$this->b){ return $this->zoom($c); } else if($a/$d<=$this->a){ return $this->zoom($d); } return null; }
centerDrop
public function centerDrop(int $a,int $b=0):?TFImage{ if($b==0){ $b=$a; } $c=$this->a($a,$b); if($c==null){ return null; } $d=$c->getWidth(); $e=$c->getHeight(); $f=$c->getImage(); $g=intval(($d-$a)/2); $h=intval(($e-$b)/2); $i=imagecreatetruecolor($a,$b); $j=imagecopyresampled($i,$f,0,0,$g,$h,$a,$b,$a,$b); if($j){ $k=new TFImage($this->tfphp); $k->createFromIM($i,$a,$b,$this->c); return $k; } return null; }
zoom
public function zoom(float $a):?TFImage{ $b=intval($this->a*$a); $c=intval($this->b*$a); $d=imagecreatetruecolor($b,$c); $e=imagecopyresampled($d,$this->d,0,0,0,0,$b,$c,$this->a,$this->b); if($e){ $f=new TFImage($this->tfphp); $f->createFromIM($d,$b,$c,$this->c); return $f; } return null; }
show
public function show(){ $a=substr($this->c,1); if($a=="jpg"){ $a="jpeg"; } header('Content-Type: image/'.$a); switch($this->c){ case'.png':imagepng($this->d); break; case'.gif':imagegif($this->d); break; case'.jpg':imagejpeg($this->d); break; } }
save
public function save(string $a){ $b=false; switch($this->c){ case'.png':$b=imagepng($this->d,$a); break; case'.gif':$b=imagegif($this->d,$a); break; case'.jpg':$b=imagejpeg($this->d,$a); break; } if($b){ return true; } return false; }
讲解
TFImage
TFImage对象存放在Image/TFImage.inc.php里面。
a
这个方法的方法名称是经过了混淆处理的,该方法的作用是计算“中心裁剪”处理后缩小的尺寸。
centerDrop
这个方法就是用来将图片通过“中心裁剪”法将图片裁剪并缩放至指定尺寸。
zoom
这个方法可以用来对图片进行等比例缩放。
show
这个方法是用来将加工后的图片显示到浏览器上,常用的场景有图片验证码、报表图像等等。
save
这个方法是用来将加工后的图片保存起来的功能。
使用
下面我们使用centerDrop功能裁剪一张图片,大家来看看效果。
代码
$myImage = new TFImage($this->tfphp); $myImage->createFromFile("images/org.jpg"); $newImage = $myImage->centerDrop(518, 518); $newImage->show();
原图
小图
可以看出来原图的纵向内容被全部保留了,横向内容的左右均被裁剪掉了一部分。
总结
今天福哥带着童鞋们实现了图像处理工具对象TFImage的基础功能,还实现了使用“中心裁剪”法裁剪图片的技巧,使用“中心裁剪”法可以很方便地完成用户头像的图片的制作,因为“中心裁剪”法可以最大限度地保留原图的内容,非常适合用户头像这种有固定尺寸的场景。