图片的宽高是351*473
我从坐标50*33
位置截取一个265*265
的图片 发现写的这个类截出来的图片不对 跟理想中的结果不一样
原图片是这样的(可能穿着有点暴漏 一开始就用的这个图片数据做的测试 所以就没换 见谅)
如果按上面的数据截出来的图理想中应该大致是这样的
但是实际截出来的图却是这样的
感觉这个图片是被放大了再截的图一样 这个类我又看了半天应该是没有问题的 那么这个php本身的处理图片不太好呢 还是我写的真的不对?大家能给看看吗?为了方便大家测试我把代码和图片打包放到百度云了 最下面有连接 大家可以下载试试 谢谢
百度云
<?php
class cutimage{
public $src; //图片的连接
public $width;//图片的宽度
public $height;//图片的高度
public $type; //图片的类型
private $image; //资源
public $disX;//开始剪裁的位置的横坐标
public $disY;//开始剪裁的位置的纵坐标
public function __construct($src,$width,$height){
$this->src = $src;
$this->width = $width;
$this->height=$height;
$info=getimagesize($this->src);
$this->type=image_type_to_extension($info[2],false);//获取类型
$fun="imagecreatefrom".$this->type;//载入图片
$this->image=$fun($this->src);
}
//剪裁
public function cut($disX,$disY,$newW,$newH){
$this->disX=$disX;
$this->disY=$disY;
$new=imagecreatetruecolor($newW,$newH);
imagecopyresampled($new,$this->image,0,0,$this->disX,$this->disY,$this->width,$this->height,$newW,$newH);
imagedestroy($this->image);
$this->image=$new;
}
//保存图片
public function saveImage($name){
$funcs = "image".$this->type;
$funcs($this->image,$name.'.'.$this->type);
}
//销毁
public function __destruct(){
imagedestroy($this->image);
}
}
$src3='1506758035.jpeg';
$b=new cutimage($src3,351,473);//手动传入图片的路径和宽高
$b->cut(50,33,265,265);//从哪里开始截图的坐标和要截取的宽高
$b->saveImage(time());
原来是我imagecopyresampled()函数的参数写错了 这个函数比较蛋疼 要传10个参数 一不小心就会写错
其实百度出来的这个参数的用法有些讲的糊里糊涂的 不够准确 现在总结一下imagecopyresampled的10个参数的意思
imagecopyresampled(新创建的画布的资源,原图资源,从新画布的x坐标开始载入图片(一般是0),从新画布的y坐标载入图片(一般是0),从原图中x坐标开始剪裁,从原图中y坐标开始剪裁,目标图片的宽度,目标图片的高度,从原图中剪裁的宽度,从原图中剪裁的高度);
下面是改正后的 大家可以拿去用