php之图片处理类缩略图加水印

用到两个image系统函数

imagecopymerge —
拷贝并合并图像的一部分

imagecopyresampled —
重采样拷贝部分图像并调整大小

/*
如何知道图片的大小和类型
无法确认调用函数:Imagecreatefrompng/jpeg……
可以独处图片的宽和高

相当于宽高是已知的
一个重要的函数getimagesize()
*/

/*
想操作图片
先把图片的大小,类型信息得到

水印:就是把指定的水印复制到目标上,并加透明效果

缩略图:就是把大图片复制到小尺寸画面上

*/

class ImageTool{

	//imageinfo	分析图片的信息
	//return array()
	public static function imageInfo($image){
		//判断图片是否存在
		if(!file_exists($image)){
			return false;

		}
		$info = getimagesize($image);
		if($info == false){
			return false;
		}

		//此时info分析出来是一个数组
		$img['width'] = $info[0];
		$img['height'] = $info[1];
		//分析图片的后缀
		$img['ext'] = substr($info['mime'],strpos($info['mime'],'/')+1);

		return $img;
	} 

	/*
	加水印
	string $dst 待操作图片
	       $water 水印小图
		   $save  不填,则默认替换原始图
		   $alpha  透明度
		   $pos    水印图放的位置1234,顺时针
	*/
	public static function water($dst,$water,$save=NULL,$pos=2,$alpha=50){
		//先保证两个图片存在
		if(!file_exists($dst) || !file_exists($water)){
			return false;
		}

		//1.保证水印不能比待操作图片还大
		$dinfo = self::imageInfo($dst);
		$winfo = self::imageInfo($water);

		//判断
		if($winfo['height'] > $dinfo['height'] || $winfo['width'] > $dinfo['width']){
			return false;
		}

		//两张图,读到画布上,但是图片可能是png,可能是jpeg,用什么函数来读
		$dfunc = 'imagecreatefrom' .$dinfo['ext'];
		$wfunc = 'imagecreatefrom' .$winfo['ext'];

		if(!function_exists($dfunc) || !function_exists($wfunc)){
			return false;
		}

		//动态加载函数来创建画布
		$dim = $dfunc($dst); //创建待操作的画布
		$wim = $wfunc($water); //创建水印画布

		//根据水印的位置,计算粘贴的坐标
		switch($pos){
			case 0; //左上角
			$posx = 0;
			$posy = 0;
			break;

			case 1; //右上角
			$posx = $dinfo['width'] - $winfo['width'];
			$posy = 0;
			break;

			case 2; //左下角
			$posx = 0;
			$posy = $dinfo['height'] - $winfo['height'];
			break;

			default:   //默认右下角
			$posx = $dinfo['width'] - $winfo['width'];
			$posy = $dinfo['height'] - $winfo['height'];

		}

		//加水印 在什么位置?
		// imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )

		imagecopymerge($dim,$wim,$posx,$posy,0,0,$winfo['width'],$winfo['height'],$alpha);

		if(!$save){

			$save=$dst;
			unlink($dst); //删除原图
		}

		//保存图片
		$createfunc = 'image' . $dinfo['ext'];
		$createfunc($dim,$save);

		//销毁图片
		imagedestroy($dim);
		imagedestroy($wim);

		return true;
	}

	/*
		thumb 生成缩略图
		等比例缩放,两边留白
	*/
	public static function thumb($dst,$save=NULL,$width=200,$height=200){
		//首先判断待处理的图片是否存在
		$dinfo = self::imageInfo($dst);
		if($dinfo == false){
			return false;
		}

		//计算缩放比例
		$calc = min($width/$dinfo['width'],$height/$dinfo['height']);

		//创建原始图的画布
		$dfunc = 'imagecreatefrom'.$dinfo['ext'];
		$dim = $dfunc($dst);

		//创建缩略图画布
		$tim = imagecreatetruecolor($width,$height);

		//创建白色填充缩略图画布
		$white = imagecolorallocate($tim,255,255,255);

		//填充缩略画布
		imagefill($tim,0,0,$white);

		//复制并缩略
		$dwidth = (int)$dinfo['width']*$calc;
		$dheight = (int)$dinfo['height']*$calc;

		$paddingx = ($width - $dwidth) / 2;
		$paddingy = ($height - $dheight) /2;

		imagecopyresampled($tim,$dim,$paddingx,$paddingy,0,0,$dwidth,$dheight,$dinfo['width'],$dinfo['height']);

		//保存图片
		if(!$save){
			$save = $dst;
			unlink($dst);
		}
		$createfun = 'image'.$dinfo['ext'];
		$createfun($tim,$save);

		imagedestroy($dim);
		imagedestroy($tim);

		return true;

	}		

调用传参:

//调用传参  加水印
echo ImageTool::water('原图片地址','加水印图片地址','生成图片')?'ok':false;
//调用 缩略图
echo ImageTool::thumb('原图地址','生成图片地址',200,200)?'ok':false;

 

 

时间: 2024-12-29 06:37:18

php之图片处理类缩略图加水印的相关文章

asp.net图片盗链时加水印问题

问题描述 可不可以实现:上传图片时同时生成一个加了水印的原图和一张原图.判断来源,如果是本域名则显示原图,如果是外部域名则显示加了水印的原图.即想在自己网站显示原图,又想被盗链时保护版权. 解决方案 解决方案二:生成两张图片没有问题,问题是盗链,你怎么判断图片的盗链?更改图片的映射到asp.net,由asp.net来输出图片?解决方案三:网上有加水印的控件,GOGLE一下解决方案四:引用1楼cqq的回复: 生成两张图片没有问题,问题是盗链,你怎么判断图片的盗链? 怎么判断是盗链啊?解决方案五:I

php给图片加水印与上传图片加水印php类

/* * 功能:PHP图片水印 (水印支持图片或文字) * 参数: * $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式: * $waterPos 水印位置,有10种状态,0为随机位置: * 1为顶端居左,2为顶端居中,3为顶端居右: * 4为中部居左,5为中部居中,6为中部居右: * 7为底端居左,8为底端居中,9为底端居右: * $waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式: * $waterText 文字水

用来给图片加水印的PHP类_php技巧

复制代码 代码如下: <?php     /*    * 功能:PHP图片水印 (水印支持图片或文字)    * 参数:    *     $groundImage   背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式:    *     $waterPos     水印位置,有10种状态,0为随机位置:    *                 1为顶端居左,2为顶端居中,3为顶端居右:    *                 4为中部居左,5为中部居中,6为中部居右:   

php生成验证码,缩略图及水印图的类分享_php实例

封装了一个类,可生成验证码,缩略图,及水印图,分享给大家 <?php class image{ session_start(); //验证码类 static public function verify($code,$width=75,$height=25,$n=4){ header("content-type:image/png"); // 创建画布 $img=imagecreatetruecolor($width,$height); // 设置背景色 $bgcolor=ima

百度ueditor上传图片加水印的例子

打开UEditor压缩包下php目录中的上传类文件:Uploader.class.php 在上传文件的主要方法下添加调用水印处理方法:  代码如下 复制代码 /**    * 上传文件的主处理方法    * @return mixed   */ private function upFile() { -------- -------- $this->stateInfo = $this->stateMap[0]; //(大概在122行) //在下面加入如下调用水印的处理方法: $this->

php实现多张图片上传加水印技巧_php技巧

复制代码 代码如下: <?php function imageWaterMark($groundImage,$waterPos=0,$waterImage="",$waterText="",$textFont=5,$textColor="#FF0000") { $isWaterImage = FALSE; $formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF.JPG.PNG格式."; //读

php 图片加水印与上传图片加水印php类_php技巧

一个正规的网站,在需要上传图片时,往往都会需要在图片上增加自己网站的LOGO水印.那么如何实现这一步骤呢?首先让我们来了解PHP图片加水印的原理. 通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring()或是在原已经定好的图像程序当中判断水印类型:一是字符串,另是增加一个图形对象在上面.以下是PHP图片加水印的转载! 参数说明: $max_file_size : 上传文件大小限制, 单位BYTE $destination_folde

php 为图片加水印函数和缩略图的函数代码

php 为图片加水印函数和缩略图的函数代码 /** * 为图片加水印 * @param string $desImg 目标图片 参数格式为 ./images/pic.jpg * @param string $waterImg 水印图片 参数格式同上,水印图片为 png格式,背景透明 * @param int positon 水印位置 1:顶部居左 2:顶部居右 3:居中 4 :底部居左 5:底部居右 * @param bool $saveas 是否另存为,默认值false,表示覆盖原图 * @p

php图片处理类(生成缩略图,增加水印,获取图片信息)

本文章提供这款图片处理类,他可以做的事情有把图片生成缩略图,可能给图片增加水印以及获取图片信息,算是比较实用代码又简洁的函数*/  代码如下 复制代码 class image {  public $info=array();  function __construct()  {   !extension_loaded('gd') && exit("www.111cn.net提示:服务器环境不支持gd库");   return true;  }  function ima