介绍
介绍
福哥今天要给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的基础功能,还实现了使用“中心裁剪”法裁剪图片的技巧,使用“中心裁剪”法可以很方便地完成用户头像的图片的制作,因为“中心裁剪”法可以最大限度地保留原图的内容,非常适合用户头像这种有固定尺寸的场景。