php 图片效果代码,php实用图片水印效果代码
php实用图片水印效果代码
define('Water',1);//水印方式(0,文字水印,1图片水印)
define('WaterImg','./water.jpg');//水印图片地址
define('WaterNum',0);//水印位置,0为随机,1-9分别为顶左顶中顶右中左中中中右底左底中底右
define('WaterX',81);//水印长
define('WaterY',81);//水印高
define('WaterType','image/jpeg');//水印图片类型
define('WaterText','爱搜罗');//水印文字(必须先转换成UTF-8才能实现中文水印)
define('WaterTextColor','#000000');//水印文字颜色
define('WaterTextSize',50);//水印文字大小 px
define('WaterTextFont','C:WINDOWSFontsSIMFANG.TTF');//水印文字字体 (仿宋)
define('WaterPtc',50);//水印透明度
//水印默认设置完毕
class water
{
private $img;//图片地址
private $img_type;//图片类型
//private $img_mime;//图片实际类型
private $img_x;//图片长
private $img_y;//图片高
private $is_water;//是否可以添加水印,布尔
private $water_img;//水印图片
private $water_text;//图片文字(UTF-8)
private $water_num;//水印位置(可能用不着)
private $water_w = WaterX;//water的宽
private $water_h = WaterY ;//water的长
private $water_x;//水印的x位置
private $water_y;//水印的y位置
private $src_x;//画布与water两图的长度差
private $src_y;//画布与water两图的高度差
private $err_msg;//图片地址
public function __construct($img,$img_type)
{
if (file_exists($img) == FALSE)
{
$this->Err_Img('No_Img');
}
$this->img = $img;
$this->img_type = $img_type;//写入图片类型
$this->Check_GD();//检查GD库
$this->Do_Water();//判断水印方式
$this->Type_Img();//判断图片类型
}
/*
* 检查GD库
*/
public function Check_GD(){
if (function_exists("gd_info") == FALSE)
{
$this->Err_Img('No_Gd');
}
}
/*
* 处理水印方式及water文件类型
*/
public function Do_Water()
{
if (Water == 1)//图片水印
{
$this->Img_Water();//处理water图片
}else{//文字水印
$this->Text_xy();//处理文字水印图片
}
}
/*
* 处理water图片
*/
public function Img_Water()
{
if (file_exists(WaterImg) == FALSE)
{
$this->Err_Img('No_WaterImg');
//使用文字水印
}
switch (WaterType)
{
case 'image/jpeg':
$this->water_img = imagecreatefromjpeg(WaterImg);
break;
}
}
/*
* 获得文字的长宽 并 计算 两图的长宽差
*/
public function Text_xy()
{
$str = iconv('GB2312','UTF-8',WaterText);
$temp = imagettfbbox(50,0,WaterTextFont,$str);//取得使用 TrueType 字体的文本的范围
$w = $temp[2] - $temp[6];
$h = $temp[3] - $temp[7];
$this->src_x = $this->img_x - $w;
$this->src_y = $this->img_y - $h;
}
/*
* 判断图片是否能够添加水印,比较大小
*/
public function Is_Water()
{
if (Water == 1)//图片水印
{
$this->src_x = $this->img_x - WaterX;
$this->src_y = $this->img_y - WaterY;
if ($this->src_x <= 0 && $this->src_y <= 0)
{
$this->Err_Img('Too_Small');
}
}else{//文字水印
if ($this->src_x <= 0 && $this->src_y <=0)
{
$this->Err_Img('Too_Small');
}
}
}
/*
* 处理水印位置
* 得到 水印位置的坐标
*/
public function Water_Num()
{
switch(WaterNum)
{
case 0://随机
$this->water_x = rand(0,($this->img_x - $this->water_w));
$this->water_y = rand(0,($this->img_y - $this->water_h));
break;
case 1://顶端居左
$this->water_x = 0;
$this->water_y = 0;
break;
case 2://顶端居中
$this->water_x = ($this->img_x - $this->water_w)/2;
$this->water_y = 0;
break;
case 3://顶端居右
$this->water_x = $this->img_x - $this->water_w;
$this->water_y = 0;
break;
case 4://中间居左
$this->water_x = 0;
$this->water_y = ($this->img_y - $this->water_h)/2;
break;
case 5://中间居中
$this->water_x = ($this->img_x - $this->water_w)/2;
$this->water_y = ($this->img_y - $this->water_h)/2;
break;
case 6://中间居右
$this->water_x = $this->img_x - $this->water_w;
$this->water_y = ($this->img_y - $this->water_h)/2;
break;
case 7://底部居左
$this->water_x = 0;
$this->water_y = $this->img_y - $this->water_h;
break;
case 8://底部居中
$this->water_x = ($this->img_x - $this->water_w)/2;
$this->water_y = $this->img_y - $this->water_h;
break;
case 9://底部居右
$this->water_x = $this->img_x - $this->water_w;
$this->water_y = $this->img_y - $this->water_h;
break;
default://随机
$this->water_x = rand(0,($this->img_x - $this->water_w));
$this->water_y = rand(0,($this->img_y - $this->water_h));
}
}
/*
* 判断图片类型
*/
public function Type_Img()
{
switch ($this->img_type)
{
case 'image/jpeg':
header("Content-type: image/jpeg");
$this->img = imagecreatefromjpeg($this->img);
break;
}
$this->Img_Water();//处理water图片
$this->img_x = imagesx($this->img);
$this->img_y = imagesy($this->img);
$this->Water_Num();//判断水印位置
$this->Is_Water();
$this->Make_img();
}
/*
* 制作图片水印
*/
public function Make_img(){
imagecopymerge($this->img,$this->water_img,$this->water_x,$this->water_y,0,0,WaterX,WaterY,WaterPtc);
imagejpeg($this->img);
}
/*
* 制作文字水印
*/
public function Make_Text()
{
echo '测试';
}
/*
* 返回错误信息
*/
public function Err_Img($msg)
{
switch($msg)
{
case 'No_Gd':
$this->err_msg = '没有安装GD库';
break;
case 'No_Img':
$this->err_msg = '图片不存在';
break;
case 'No_WaterImg':
$this->err_msg = 'water图片不存在';
break;
case 'Too_Small':
$this->err_msg = '图片过小';
break;
}
die($this->err_msg);//输出错误信息
}
public function __destruct()
{
imagedestroy($this->img);
imagedestroy($this->img_water);
}
}
$img = new water('./100.jpg','image/jpeg');//实例化
?>
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
php 图片效果代码,php实用图片水印效果代码相关推荐
- java图片加文字水印_JAVA实现图片的修改,添加文字水印效果
JAVA实现图片的修改,添加文字水印效果,根据文字内容生成图片,下面是具体的代码,以及测试方法: 实现类: package JavaMoImage; import javax.p_w_picpathi ...
- java验证码的代码_java实用验证码的实现代码
本文为大家分享了java实用验证码的实现代码,供大家参考,具体内容如下 1.ValidCode package validImg; import java.awt.Color; import java ...
- Asp.net(C#)给图片加上水印效果(转自园上的Seven Eleven)
Asp.net(C#)给图片加上水印效果 private void Btn_Upload_Click(object sender, System.EventArgs e) { ...
- python的控件text的文本属性_只需6行Python代码就给图片加上水印——你一看就会了...
大家在做项目开发的过程中,会不会经常遇到需要处理图片却没有快速有效的工具的情况呢?比如客户需要给图片加上水印,你可能会用到PS这些高级软件去处理,这样虽然有效果但是需要相对较长的时间:作为程序猿,你一 ...
- php给图片加图片水印,php给图片添加文字或图片水印实现代码
原标题:php给图片添加文字或图片水印实现代码 一.文字水印 文字水印就是在图片上加上文字,主要使用gd库的imagefttext方法,并且需要字体文件.效果图如下: $dst_path = 'dst ...
- gdiplus 水印_Delphi程序的应用GDI+制作水印效果图片
利用GDI+可以很方便的制作带水印效果的图片,网上介绍这方面的文章也很多,但鲜有Delphi的,本文参照网上文章http://www.codeproject.com/KB/GDI-plus/water ...
- C# 处理PPT水印(二)——去除水印效果(文本水印、图片水印)
本文将对C#处理PPT幻灯片中的水印进一步说明和介绍.在C# 处理PPT水印(一)一文中,分享了如何插入水印效果的方法,包括插入文字水印效果.插入图片作为水印效果两种情况,那对于不需要水印效果的情况, ...
- php 图片裁剪保存,PHP实现图片裁剪、添加水印效果代码
这篇文章主要介绍了PHP实现图片裁剪.添加水印效果代码,本文给出代码示例,代码中包含一些说明注释,需要的朋友可以参考下 3.PHP对图像的裁剪 裁剪之前 header("content-ty ...
- Java图片水印生成器代码 - 批量给自己的网站图片加水印
Java图片水印生成器代码 - 批量给自己的网站图片加水印 最近在做一款APP,App中的图片是自己一个个的画出来的,为了保证图片不被盗用和处理,所以就需要加上水印防盗.这跟CSDN一样. 注意事项: ...
- html鼠标点击切换图片,js鼠标点击图片切换效果代码分享
本文实例讲述了js鼠标点击图片切换效果.分享给大家供大家参考.具体如下: 实现原理很简单,其实是多张图片叠加起来,点击图片后依次赋予图片一个class,使其看起来在表面而已,点击图片,可以实现图片的不 ...
最新文章
- MOSS 2007 User Profile 系列 索引
- 积跬步-java任职要求
- ReactNative简介、开发环境、调试、常用组件、useState状态、FlatList组件、SectionList组件、Platform 模块、定义样式、图片组件、触摸事件、打包apk发布版
- oracle监听服务无法启动不了,关于ORACLE监听服务无法启动的问题
- 计费系统设计_Web设计人员的按小时计费与基于价值的定价
- 软件测试中英文词汇对照表
- Selenium自动化框架:数据驱动、关键字驱动和混合
- powerpoint 2016表格中添加行
- Arcgis4js实现链家找房的效果
- 五、ELK设置用户密码登陆
- PostgreSQL 视图
- 计算机max函数的格式,Word怎么输入Max公式
- 解析:为什么程序员应该有一台Mac个人电脑?
- 实现进程互斥需要遵循的原则
- win7计算机用户配置文件存储路径,windows7系统电脑临时文件夹保存路径在哪
- 如何使用 frontend-tracker 工具收集前端错误?
- Application Repository一键启用微信告警通知
- oracle lag over 用法,lag()使用方法
- 中国研修网计算机培训心得,网络研修心得体会范文
- 19001月1日是星期一c语言,已知道1900年1月1日是星期一,请输入一具体的日期,如何判断此日期是星期几?请利用C语言来进行编程...