php上传图片加水印,图片水印,文字水印
这是一款比较完整的在用户上传图片时就自动给图片增加上水印,这款增加水印功能可以增加文字水印与图片水印,实例代码如下:
<?php /* * created on 2010-6-21 * * the class for control image * * made by s71ence * * @$img_path 图片路径 * @$is_auto_reduce 图片是否自动按照大小等级压缩 1是 * @$is_appoint 是否手动进行压缩或放大 1是 * @$multiple 手动指定压缩/放大比例 * @$is_water_str 是否加水印文字 1是 * @$water_str 水印文字 * @$is_watermark 是否加水印图片 1是 * @$logo_path 水印图片路径 * @$is_display 是否显示图片 1是 * @$is_create 是否生成压缩后的图片 1是 * * 注: * 1.生成新图时不可显示图片,即$isdisplay和$iscreate不可同时置为1 * 2.当图片宽或高小于1000时,需手动设置压缩比例进行压缩 * 3.不建议启用水印,若要启用,建议原图片大小最好在1000以内 * 4.水印文字中不可含有中文 * 5.新生成的图片在原目录文件中,支持n个层级 */ class image_control { private $img_path; private $is_auto_reduce; private $is_appoint; private $multiple; private $is_water_str; private $water_str; private $is_watermark; private $logo_path; private $is_display; private $is_create; function __construct($img_path, $is_auto_reduce, $is_appoint, $multiple, $is_water_str, $water_str, $is_watermark, $logo_path, $is_display, $is_create) { $this->img_path = $img_path; $this->is_auto_reduce = $is_auto_reduce; $this->is_appoint = $is_appoint; $this->multiple = $multiple; $this->is_water_str = $is_water_str; $this->water_str = $water_str; $this->is_watermark = $is_watermark; $this->logo_path = $logo_path; $this->is_display = $is_display; $this->is_create = $is_create; } function img_control() { //获取原图 $img_info = getimagesize($this->img_path); switch ($img_info[2]) { case 1: $img_get = @imagecreatefromgif($this->img_path); break; case 2: $img_get = @imagecreatefromjpeg($this->img_path); break; case 3: $img_get = @imagecreatefrompng($this->img_path); break; } //文字水印 if ($this->is_water_str == 1) { //imagettftext(原图,文字大小,文字旋转,水印起始坐标x,水印起始坐标y,$te,'simhei.ttf',$str); $te = imagecolorallocate($img_get, 255, 255, 255); $str = iconv("gbk", "utf-8", $this->water_str); //水印文字 imagettftext($img_get, 16, 0, $img_info[0] - 200, $img_info[1] - 20, $te, 'msyh.ttf', $str); } //图片水印 if ($this->is_watermark == 1) { //水印图片处理 $logo_info = getimagesize($this->logo_path); switch ($logo_info[2]) { case 1: $logo = @imagecreatefromgif($this->logo_path); break; case 2: $logo = @imagecreatefromjpeg($this->logo_path); break; case 3: $logo = @imagecreatefrompng($this->logo_path); break; } //水印logo图片 //函数说明:imagecopy(原图,水印图片,水印坐标x,水印坐标y,水印图片开始坐标x,水印图片开始坐标y,'水印图片宽','水印图片高'); imagecopy($img_get, $logo, 0, 0, 0, 0, $logo_info[0], $logo_info[1]); } //自动图片压缩 按图片大小分级自动压缩 //imagecopyresized(画布,原图,画布起始x坐标,画布起始y坐标,原图起始x坐标,原图起始x坐标,新图片宽,新图片高,原图片宽,原图片高); if ($this->is_auto_reduce == 1) { if ($img_info[0] >= 3000 || $img_info[1] >= 3000) { $new_image_get = imagecreatetruecolor($img_info[0] * 0.03, $img_info[1] * 0.03); //生成画布 imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.03, $img_info[1] * 0.03, $img_info[0], $img_info[1]); } else if ($img_info[0] >= 2500 || $img_info[1] >= 2500) { $new_image_get = imagecreatetruecolor($img_info[0] * 0.04, $img_info[1] * 0.04); imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.04, $img_info[1] * 0.04, $img_info[0], $img_info[1]); } else if ($img_info[0] >= 2000 || $img_info[1] >= 2000) { $new_image_get = imagecreatetruecolor($img_info[0] * 0.05, $img_info[1] * 0.05); imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.05, $img_info[1] * 0.05, $img_info[0], $img_info[1]); } else if ($img_info[0] >= 1500 || $img_info[1] >= 1500) { $new_image_get = imagecreatetruecolor($img_info[0] * 0.08, $img_info[1] * 0.08); imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.08, $img_info[1] * 0.08, $img_info[0], $img_info[1]); } else if ($img_info[0] >= 1000 || $img_info[1] >= 1000) { $new_image_get = imagecreatetruecolor($img_info[0] * 0.1, $img_info[1] * 0.1); imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.1, $img_info[1] * 0.1, $img_info[0], $img_info[1]); } else if ($img_info[0] >= 500 || $img_info[1] >= 500) { $new_image_get = imagecreatetruecolor($img_info[0] * 0.2, $img_info[1] * 0.2); imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.2, $img_info[1] * 0.2, $img_info[0], $img_info[1]); } else if ($img_info[0] >= 300 || $img_info[1] >= 300) { $new_image_get = imagecreatetruecolor($img_info[0] * 0.3, $img_info[1] * 0.3); imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.3, $img_info[1] * 0.3, $img_info[0], $img_info[1]); } else { $new_image_get = imagecreatetruecolor($img_info[0] * 1, $img_info[1] * 1); imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 1, $img_info[1] * 1, $img_info[0], $img_info[1]); } } //手动图片压缩 //imagecopyresized(画布,原图,画布起始x坐标,画布起始y坐标,原图起始x坐标,原图起始x坐标,新图片宽,新图片高,原图片宽,原图片高); if ($this->is_appoint) { $new_image_get = imagecreatetruecolor($img_info[0] * $this->multiple, $img_info[1] * $this->multiple); //生成画布 imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * $this->multiple, $img_info[1] * $this->multiple, $img_info[0], $img_info[1]); } //图像输出 if ($this->is_display == 1) { header("content-type: image/jpeg"); return imagejpeg($new_image_get); } //新图像生成 if ($this->is_create == 1) { $new_name = explode("/", $this->img_path); $new_name_string = ""; for ($i = 0; $i < count($new_name) - 1; $i++) { $new_name_string.= $new_name[$i] . "/"; } $new_img_path = $new_name_string . "new" . $new_name[$i]; if (imagejpeg($new_image_get, $new_img_path) && imagejpeg($img_get, $this->img_path)) { setcookie("img_new_path", $new_img_path); //return "图片生成成功!<br/>新图:".$new_img_path."<br/>原图:".$this->img_path; } else { return "图片生成失败,请检查配置是否正确!"; } } } function __desctruct() { //clear } } //调用方法,代码如下: /* $img_path="../users/user_photo/t2.jpg"; //被操作的图片路径 $is_auto_reduce=1;//图片是否自动按照大小等级压缩 1是 $is_appoint=0;//是否手动进行压缩 1是 $multiple=0.5;//手动指定压缩比例 $is_water_str=0;//是否加水印文字 $water_str="www.111cn.net";//水印文字 $is_watermark=0;//是否加水印图片 1是 $logo_path="../image/logo_about.gif";//水印图片路径 $is_display=0;//是否显示图片 1是 $is_create=1;//是否生成压缩后的图片 1是 $img=new image_control($img_path,$is_auto_reduce,$is_appoint,$multiple,$is_water_str,$water_str,$is_watermark,$logo_path,$is_display,$is_create); echo $img->img_control(); */
本文地址:http://www.phprm.com/tuxiang/fs4487.html
转载随意,但请附上文章地址:-)