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
转载随意,但请附上文章地址:-)