写的这个图片剪裁类遇到点问题

图片的宽高是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());

阅读 2k
1 个回答

原来是我imagecopyresampled()函数的参数写错了 这个函数比较蛋疼 要传10个参数 一不小心就会写错
其实百度出来的这个参数的用法有些讲的糊里糊涂的 不够准确 现在总结一下imagecopyresampled的10个参数的意思
imagecopyresampled(新创建的画布的资源,原图资源,从新画布的x坐标开始载入图片(一般是0),从新画布的y坐标载入图片(一般是0),从原图中x坐标开始剪裁,从原图中y坐标开始剪裁,目标图片的宽度,目标图片的高度,从原图中剪裁的宽度,从原图中剪裁的高度);
下面是改正后的 大家可以拿去用

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,$newW,$newH,$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);  
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题