php图片水印与缩略图
2010-05-21 21:32
337 查看
最近由于客户需求,写了一个图片压缩的函数,可加水印。
由于我使用PHP开发也只是2个月的事,肯定会存在一些不足,希望各位大侠不吝赐教,有什么问题可以发邮件给我,邮箱是:silence0721@gmail.com。下面是源码
<?php
/*************************************************************************************
函数功能:图片操作(压缩/放大),可加水印文字/图片
made by S71ENCE
参数说明:
$imgHave->被操作的图片路径
$isAutoReduce->图片是否自动按照大小等级压缩 是(1)
$isAppoint->是否手动进行压缩 是(1)
$multiple->手动指定压缩比例
$isWaterStr->是否加水印文字 是(1)
$waterStr->水印文字
$isWatermark->是否加水印图片 是(1)
$imglogo->水印图片路径
$isDisplay->是否显示图片 是(1)
$isCreate->是否生成压缩后的图片 是(1)
注:1.生成新图时不可显示图片,即$isDisplay和$isCreate不可同时置为1
2.当图片宽或高小于1000时,需手动设置压缩比例进行压缩
3.不建议启用水印,若要启用,建议原图片大小最好在1000以内
4.水印文字中不可含有中文
5.新生成的图片在原目录文件中,支持N个层级
**********************************************************************************/
function image_control($imgHave,$isAutoReduce,$isAppoint,$multiple,$isWaterStr,$waterStr,$isWatermark,$imglogo,$isDisplay,$isCreate)
{
//获取原图
$imgInfo=getimagesize($imgHave);
switch($imgInfo[2])
{
case 1:
$imgGet=@imagecreatefromgif($imgHave);
break;
case 2:
$imgGet=@imagecreatefromjpeg($imgHave);
break;
case 3:
$imgGet=@imagecreatefrompng($imgHave);
break;
}
//文字水印
if($isWaterStr==1)
{
//imagettftext(原图,文字大小,文字旋转,水印起始坐标X,水印起始坐标Y,$te,'simhei.ttf',$str);
$te=imagecolorallocate($imgGet,255,255,255);
$str=iconv("gbk","UTF-8",$waterStr);//水印文字
imagettftext($imgGet,16,0,$imgInfo[0]-200,$imgInfo[1]-20,$te,'MSYH.TTF',$str);
}
//图片水印
if($isWatermark==1)
{
//水印图片处理
$logoInfo=getimagesize($imglogo);
switch($logoInfo[2])
{
case 1:
$logo=@imagecreatefromgif($imglogo);
break;
case 2:
$logo=@imagecreatefromjpeg($imglogo);
break;
case 3:
$logo=@imagecreatefrompng($imglogo);
break;
}
//水印logo图片
//函数说明:imagecopy(原图,水印图片,水印坐标X,水印坐标Y,水印图片开始坐标X,水印图片开始坐标Y,'水印图片宽','水印图片高');
imagecopy($imgGet,$logo,0,0,0,0,$logoInfo[0],$logoInfo[1]);
}
//自动图片压缩 按图片大小分级自动压缩,3个压缩等级,宽高小于1000的不进行压缩
//imagecopyresized(画布,原图,画布起始X坐标,画布起始Y坐标,原图起始X坐标,原图起始X坐标,新图片宽,新图片高,原图片宽,原图片高);
if($isAutoReduce==1)
{
if($imgInfo[0]>3000 || $imgInfo[1]>3000)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*0.2,$imgInfo[1]*0.2);//生成画布
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*0.2,$imgInfo[1]*0.2,$imgInfo[0],$imgInfo[1]);
}
else if($imgInfo[0]>2000 || $imgInfo[1]>2000)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*0.3,$imgInfo[1]*0.3);
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*0.3,$imgInfo[1]*0.3,$imgInfo[0],$imgInfo[1]);
}
else if($imgInfo[0]>1000 || $imgInfo[1]>1000)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*0.5,$imgInfo[1]*0.5);
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*0.5,$imgInfo[1]*0.5,$imgInfo[0],$imgInfo[1]);
}
else
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*1,$imgInfo[1]*1);
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*1,$imgInfo[1]*1,$imgInfo[0],$imgInfo[1]);
}
}
//手动图片压缩
//imagecopyresized(画布,原图,画布起始X坐标,画布起始Y坐标,原图起始X坐标,原图起始X坐标,新图片宽,新图片高,原图片宽,原图片高);
if($isAppoint)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*$multiple,$imgInfo[1]*$multiple);//生成画布
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*$multiple,$imgInfo[1]*$multiple,$imgInfo[0],$imgInfo[1]);
}
//图像输出
if($isDisplay==1)
{
header("Content-type: image/jpeg");
return imagejpeg($newImageGet);
}
//新图像生成
if($isCreate==1)
{
$newName=explode("/",$imgHave);
$newNameString="";
for($i=0;$i<count($newName)-1;$i++)
{
$newNameString.=$newName[$i]."/";
}
$newImgName=$newNameString."new".$newName[$i];
if(imagejpeg($newImageGet,$newImgName) && imagejpeg($imgGet,$imgHave))
{
return "图片生成成功!<br/>新图:".$newImgName."<br/>原图:".$imgHave;
}
else
{
return "图片生成失败,请检查配置是否正确!";
}
}
}
/************************************************************************************
函数调用方法:
$imgHave="../image/125T501N450-1TX5.jpg"; //被操作的图片路径
$isAutoReduce=0;//图片是否自动按照大小等级压缩 是(1)
$isAppoint=1;//是否手动进行压缩 是(1)
$multiple=0.5;//手动指定压缩比例
$isWaterStr=0;//是否加水印文字
$waterStr="www.cyooy.com";//水印文字
$isWatermark=0;//是否加水印图片 是(1)
$imglogo="../image/Logo_about.gif";//水印图片路径
$isDisplay=1;//是否显示图片 是(1)
$isCreate=0;//是否生成压缩后的图片 是(1)
echo image_control($imgHave,$isAutoReduce,$isAppoint,$multiple,$isWaterStr,$waterStr,$isWatermark,$imglogo,$isDisplay,$isCreate);
*************************************************************************************/
?>
由于我使用PHP开发也只是2个月的事,肯定会存在一些不足,希望各位大侠不吝赐教,有什么问题可以发邮件给我,邮箱是:silence0721@gmail.com。下面是源码
<?php
/*************************************************************************************
函数功能:图片操作(压缩/放大),可加水印文字/图片
made by S71ENCE
参数说明:
$imgHave->被操作的图片路径
$isAutoReduce->图片是否自动按照大小等级压缩 是(1)
$isAppoint->是否手动进行压缩 是(1)
$multiple->手动指定压缩比例
$isWaterStr->是否加水印文字 是(1)
$waterStr->水印文字
$isWatermark->是否加水印图片 是(1)
$imglogo->水印图片路径
$isDisplay->是否显示图片 是(1)
$isCreate->是否生成压缩后的图片 是(1)
注:1.生成新图时不可显示图片,即$isDisplay和$isCreate不可同时置为1
2.当图片宽或高小于1000时,需手动设置压缩比例进行压缩
3.不建议启用水印,若要启用,建议原图片大小最好在1000以内
4.水印文字中不可含有中文
5.新生成的图片在原目录文件中,支持N个层级
**********************************************************************************/
function image_control($imgHave,$isAutoReduce,$isAppoint,$multiple,$isWaterStr,$waterStr,$isWatermark,$imglogo,$isDisplay,$isCreate)
{
//获取原图
$imgInfo=getimagesize($imgHave);
switch($imgInfo[2])
{
case 1:
$imgGet=@imagecreatefromgif($imgHave);
break;
case 2:
$imgGet=@imagecreatefromjpeg($imgHave);
break;
case 3:
$imgGet=@imagecreatefrompng($imgHave);
break;
}
//文字水印
if($isWaterStr==1)
{
//imagettftext(原图,文字大小,文字旋转,水印起始坐标X,水印起始坐标Y,$te,'simhei.ttf',$str);
$te=imagecolorallocate($imgGet,255,255,255);
$str=iconv("gbk","UTF-8",$waterStr);//水印文字
imagettftext($imgGet,16,0,$imgInfo[0]-200,$imgInfo[1]-20,$te,'MSYH.TTF',$str);
}
//图片水印
if($isWatermark==1)
{
//水印图片处理
$logoInfo=getimagesize($imglogo);
switch($logoInfo[2])
{
case 1:
$logo=@imagecreatefromgif($imglogo);
break;
case 2:
$logo=@imagecreatefromjpeg($imglogo);
break;
case 3:
$logo=@imagecreatefrompng($imglogo);
break;
}
//水印logo图片
//函数说明:imagecopy(原图,水印图片,水印坐标X,水印坐标Y,水印图片开始坐标X,水印图片开始坐标Y,'水印图片宽','水印图片高');
imagecopy($imgGet,$logo,0,0,0,0,$logoInfo[0],$logoInfo[1]);
}
//自动图片压缩 按图片大小分级自动压缩,3个压缩等级,宽高小于1000的不进行压缩
//imagecopyresized(画布,原图,画布起始X坐标,画布起始Y坐标,原图起始X坐标,原图起始X坐标,新图片宽,新图片高,原图片宽,原图片高);
if($isAutoReduce==1)
{
if($imgInfo[0]>3000 || $imgInfo[1]>3000)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*0.2,$imgInfo[1]*0.2);//生成画布
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*0.2,$imgInfo[1]*0.2,$imgInfo[0],$imgInfo[1]);
}
else if($imgInfo[0]>2000 || $imgInfo[1]>2000)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*0.3,$imgInfo[1]*0.3);
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*0.3,$imgInfo[1]*0.3,$imgInfo[0],$imgInfo[1]);
}
else if($imgInfo[0]>1000 || $imgInfo[1]>1000)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*0.5,$imgInfo[1]*0.5);
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*0.5,$imgInfo[1]*0.5,$imgInfo[0],$imgInfo[1]);
}
else
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*1,$imgInfo[1]*1);
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*1,$imgInfo[1]*1,$imgInfo[0],$imgInfo[1]);
}
}
//手动图片压缩
//imagecopyresized(画布,原图,画布起始X坐标,画布起始Y坐标,原图起始X坐标,原图起始X坐标,新图片宽,新图片高,原图片宽,原图片高);
if($isAppoint)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*$multiple,$imgInfo[1]*$multiple);//生成画布
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*$multiple,$imgInfo[1]*$multiple,$imgInfo[0],$imgInfo[1]);
}
//图像输出
if($isDisplay==1)
{
header("Content-type: image/jpeg");
return imagejpeg($newImageGet);
}
//新图像生成
if($isCreate==1)
{
$newName=explode("/",$imgHave);
$newNameString="";
for($i=0;$i<count($newName)-1;$i++)
{
$newNameString.=$newName[$i]."/";
}
$newImgName=$newNameString."new".$newName[$i];
if(imagejpeg($newImageGet,$newImgName) && imagejpeg($imgGet,$imgHave))
{
return "图片生成成功!<br/>新图:".$newImgName."<br/>原图:".$imgHave;
}
else
{
return "图片生成失败,请检查配置是否正确!";
}
}
}
/************************************************************************************
函数调用方法:
$imgHave="../image/125T501N450-1TX5.jpg"; //被操作的图片路径
$isAutoReduce=0;//图片是否自动按照大小等级压缩 是(1)
$isAppoint=1;//是否手动进行压缩 是(1)
$multiple=0.5;//手动指定压缩比例
$isWaterStr=0;//是否加水印文字
$waterStr="www.cyooy.com";//水印文字
$isWatermark=0;//是否加水印图片 是(1)
$imglogo="../image/Logo_about.gif";//水印图片路径
$isDisplay=1;//是否显示图片 是(1)
$isCreate=0;//是否生成压缩后的图片 是(1)
echo image_control($imgHave,$isAutoReduce,$isAppoint,$multiple,$isWaterStr,$waterStr,$isWatermark,$imglogo,$isDisplay,$isCreate);
*************************************************************************************/
?>
相关文章推荐
- php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
- PHP 开发学习[3] —— 文字水印,缩略图,图片水印实现类
- php下图片文字混合水印与缩略图实现代码
- php-缩略图-水印-图片处理类-1212
- 超级好用的一个php上传图片类(随机名,缩略图,加水印)
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
- PHP图像处理函数:文字水印,图片水印,缩略图(等比缩放)
- PHP Imagick完美实现图片裁切、生成缩略图、添加水印
- PHP提取第一张图片+生成缩略图+图片添加水印
- php中图片文字混合水印与缩略图
- php 图片操作类,支持生成缩略图,添加水印,上传缩略图
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
- 【PHP】【PHP100改进系列】上传图片水印、缩略图、图片大小预处理类
- php之图片处理类缩略图加水印
- PHP面向对象——GD库实现图片水印和缩略图
- 超级好用的一个php上传图片类(随机名,缩略图,加水印)
- PHP---GD库实现图片水印与缩略图
- php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转