php☞图片操作

php☞图片操作

水印图片

  • 水印图
    在这里插入图片描述
  • before:
    在这里插入图片描述
  • after
    在这里插入图片描述

代码片段

class Water
{
    /**
    * 生成水印图
    * @param $src_im [增加的水印图片创建一块画布]
    * @param $water_im[水印图片创建一块画布]
    * @return resource
    */
    function apply_full_water($src_im, $water_im)
    {
        $width = imagesx($src_im);
        $height = imagesy($src_im);

        $water_w = imagesx($water_im);
        $water_h = imagesy($water_im);

        $im = imagecreatetruecolor($width, $height);
        imagecopy($im, $src_im, 0, 0, 0, 0, $width, $height);
        imagecopyresampled($im, $water_im, 0, 0, 0, 0, $width, $height, $water_w, $water_h);

        return $im;
    }

    function setType($typeArr,$srcImg)
    {
        switch ($typeArr) {
            case "png":
                $src_im = imagecreatefrompng($srcImg);
                break;
            case "jpeg":
                $src_im = imagecreatefromjpeg($srcImg);
                break;
            case "gif":
                $src_im = imagecreatefromgif($srcImg);
                break;
            default:
                $src_im = imagecreatefromjpeg($srcImg);
                break;
        }
        return $src_im;
    }
}

	$srcImg = "./UI001AP2414-001.jpg";
	$waterImg = "./water.png";
	$srctype= explode(".", $srcImg);
	$watertype = explode(".",$waterImg);
	$water = new Water();
	$src_im = $water->setType($srctype[2],$srcImg);
	$water_im = $water->setType($watertype[2],$waterImg);
	$im = $water->apply_full_water($src_im,$water_im);
	imagepng($im, "./".date("ymd").rand(1,1000).".".$srctype[2]);
	//注:水印图片生成到当前目录 命名为当前年月日+1到1000随机数

压缩图片(比如原始图8M压缩后成666KB)

最后结果:

  • before:
    在这里插入图片描述
  • after:
    在这里插入图片描述

代码片段

class img
{

	/**
     * @function 等比缩放函数(以保存的方式实现)
     * @param string $picname 被缩放的处理图片源
     * @param int $maxX 缩放后图片的最大宽度
     * @param int $maxY 缩放后图片的最大高度
     * @param string $pre 缩放后图片名的前缀名
     * @return string 返回后的图片名称(带路径),如a.jpg --> s_a.jpg
     */
    function scalePic($picname,$maxX=100,$maxY=100,$pre='s_')
    {
        $info = getimagesize($picname); //获取图片的基本信息
        $width = $info[0];//获取宽度
        $height = $info[1];//获取高度
        //判断图片资源类型并创建对应图片资源
        $im = $this->getPicType($info[2],$picname);
        //计算缩放比例
        $scale = ($maxX/$width)>($maxY/$height)?$maxY/$height:$maxX/$width;
        //计算缩放后的尺寸
        $sWidth = floor($width*$scale);
        $sHeight = floor($height*$scale);
        //创建目标图像资源
        $nim = imagecreatetruecolor($sWidth,$sHeight);
        //等比缩放
        imagecopyresampled($nim,$im,0,0,0,0,$sWidth,$sHeight,$width,$height);
        //输出图像
        $newPicName = $this->outputImage($picname,$pre,$nim);
        //释放图片资源
        imagedestroy($im);
        imagedestroy($nim);
        return $newPicName;
    }

    /**
     * function 判断并返回图片的类型(以资源方式返回)
     * @param int $type 图片类型
     * @param string $picname 图片名字
     * @return 返回对应图片资源
     */
    function getPicType($type,$picname)
    {
        $im=null;
        switch($type)
        {
            case 1:  //GIF
                $im = imagecreatefromgif($picname);
                break;
            case 2:  //JPG
                $im = imagecreatefromjpeg($picname);
                break;
            case 3:  //PNG
                $im = imagecreatefrompng($picname);
                break;
            case 4:  //BMP
                $im = imagecreatefromwbmp($picname);
                break;
            default:
                die("不认识图片类型");
                break;
        }
        return $im;
    }

    /**
     * function 输出图像
     * @param string $picname 图片名字
     * @param string $pre 新图片名前缀
     * @param resourse $nim 要输出的图像资源
     * @return 返回新的图片名
     */
    function outputImage($picname,$pre,$nim)
    {
        $info = getimagesize($picname);
        $picInfo = pathInfo($picname);
        $newPicName = $picInfo['dirname'].'/'.$pre.$picInfo['basename'];//输出文件的路径
        switch($info[2])
        {
            case 1:
                imagegif($nim,$newPicName);
                break;
            case 2:
                imagejpeg($nim,$newPicName);
                break;
            case 3:
                imagepng($nim,$newPicName);
                break;
            case 4:
                imagewbmp($nim,$newPicName);
                break;
        }
        return $newPicName;
    }

}
	$srcImg = "./UI001AP2414-001.jpg";
	$result = (new img())->scalePic($srcImg,1000,1000,"s_");
	var_dump($result);die;

//注:输出结果 string(23) "./s_UI001AP2414-001.jpg"

附:img类 https://github.com/adminwangyaofeng/test/blob/master/Img

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值