PHP 生成图片缩略图

    /**
	 * @param $filename 要缩略的图片 - 相对地址或带域名的地址(限本服务器)
	 * @param $dw 画布的宽(也就是你要缩略的宽)
	 * @param $dh 画布的高(也就是你要缩略的高)
	 * @param $newfile 保存路径
	 */
	function cutThumb($filename, $dw=300, $dh=300, $newfile='')
	{
		$parse_url = parse_url($filename);
		$filename_abs = ROOTPATH.$parse_url['path'];//获取文件的绝对地址
		$pathinfo = pathinfo($parse_url['path']);

		if (empty($newfile)){
			$newfile = preg_replace('/[\/]+/i','/','/thumb'.$pathinfo['dirname']);
			if (!is_dir(ROOTPATH.$newfile)){
				@mkdir (ROOTPATH.$newfile,0777,true);
			}
			$newfile .= '/'.$pathinfo['filename'].'_'.$dw.'x'.$dh.'.'.$pathinfo['extension'];
		}
		$newfile_abs = ROOTPATH.$newfile;//缩略图的绝对地址
		$newfile = (!empty($parse_url['host'])?'//'.$parse_url['host']:'').$newfile;//缩略图的相对地址
		if (file_exists($newfile_abs)){
			return $newfile;
		}

		//获取用户名图
		//获取原图的宽高
		$infoSrc = getimagesize($filename_abs);//这个getimagesize()是php里面的系统函数用来获取图片的具体信息的
		switch ($infoSrc['mime']) {
			case 'image/jpeg'://如果类型是imag/jpeg就创建jpeg类型的画布
				$srcImg = @imagecreatefromjpeg($filename_abs);
				break;
			case 'image/gif':
				$srcImg = @imagecreatefromgif($filename_abs);//如果类型是gif就创建gif类型的画布
			case 'image/png':
				$srcImg = @imagecreatefrompng($filename_abs);//如果类型是png就创建png类型的画布
				break;
		}

		$sw      = $infoSrc[0];//获取要缩略图片的宽
		$sh      = $infoSrc[1];//获取要缩略的图片的高
		//创建缩略图画布
		$destImg = @imagecreatetruecolor($dw, $dh);
		//为缩略图填充背景色
		$bg = @imagecolorallocate($destImg, 250, 250, 250);
		@imagefill($destImg, 0, 0, $bg);

		//计算缩放比例
		$scale = max($dw/$sw, $dh/$sh);

		//设置缩略图的坐标及宽度和高度
		$sw = $dw/$scale;
		$sh = $dh/$scale;
		//居中放置
		$dx = ($infoSrc[0] - $sw)/2;
		$dy = ($infoSrc[1] - $sh)/2;
		//创建缩略图
		@imagecopyresampled($destImg, $srcImg, 0, 0, $dx, $dy, $dw, $dh, $sw, $sh);
		//把缩略图存放到上一步设置的保存路径里
		return @imagejpeg($destImg, $newfile_abs) ? $newfile : $filename;

	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咯拉咯啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值