php缩略图和添加水印
php图像方面的应用一般包括生成验证码和缩略图添加水印。
今天主要写了一下图片的缩略和添加水印,功能基本上都实现了。作为一个基本的小case还是没有什么问题的。
在完成缩略和添加水印的过程中主要用到的函数包括:
图片缩略用到的php函数 :
basename($path);//该函数返回文件路径中的文件名
dirname($path);//返回文件中的目录部分
imagettftext($image,$fontsize,0,30,100,$tc,$fontpath,$str);//将文字写入图片
$res=imagecopyresized($newImage, $srcImage,0,0,0,0,$newWidth,$newHeight,$width,$height);//生成新图像
示例代码如下:
<?php
class ServiceImage{
/*
* @生成缩略图
* Lixuefeng
* $rate缩放比例
* $src原图片文件
* $dis生成的新图片文件
*/
public function thumbnail($rate,$src){
$absolutePath=ServiceTable::YII_PHYSICAL_PATH;//系统配置的物理路径根目录
$psrc=$absolutePath.$src;//包含文件名称的物理路径全名称
if(!realpath($psrc)){
die("图片路径错误!");
}
$imageInfo=getimagesize($psrc);//获取文件的信息,包括图片长宽高,图片类型
list($width,$height)=$imageInfo;//将图片长宽高分别赋值
$imageType=$imageInfo['mime'];//获取图片mine类型
$newWidth=$width*$rate;
$newHeight=$height*$rate;//根据缩放比例设定新生成图片的长宽高
$newImage=ImageCreateTrueColor($newWidth,$newHeight);//根据新图片长宽高生成新图片索引
$srcImage=$this->getImageByType($imageType, $psrc);//根据图片类型生成新的图片对象
$res=imagecopyresized($newImage, $srcImage,0,0,0,0,$newWidth,$newHeight,$width,$height);//生成新图像
$res=imagejpeg($newImage,$psrc);//生成新图像
if($res){
return $src;
}else{
return false;
}
}
public function getImageByType($imageType,$src){
switch($imageType){
case 'image/jpeg':
return imagecreatefromjpeg($src);
break;
case 'image/png':
return imagecreatefrompng($src);
break;
case 'image/gif':
return imagecreatefromgif($src);
break;
case 'image/bmp':
return imagecreatefromwbmp($src);
break;
default:
die("图片类型错误");
}
}
public function addWatermark($src,$font=null,$str,$fontsize){
$absolutePath=ServiceTable::YII_PHYSICAL_PATH;//系统配置的物理路径根目录
$psrc=$absolutePath.$src;
$imageInfo=getimagesize($psrc);
$fileName=basename($psrc);
$path=dirname($psrc);
$newPsrc=$path.'/thumb/'.$fileName;
$imageType=$imageInfo['mime'];
$image=$this->getImageByType($imageType,$psrc);
$relitivePath=dirname($src).'/thumb/'.$fileName;//存储相对路径
if(!$font){
$fontpath='c:/windows/fonts/arial.ttf';
}else{
$fontpath=$font;
}
$tc=imagecolorallocate($image,255,255, 255);//设置文字颜色
imagettftext($image,$fontsize,0,30,100,$tc,$fontpath,$str);//将文字写入图片
$res=imageJpeg($image,$newPsrc);
if($res){
return $relitivePath;
}else{
return false;
}
}
}