php实现图片上传时添加文字和图片水印技巧

 更新时间:2020年04月18日 10:41:17   作者:D_aneil  
这篇文章主要为大家详细介绍了php实现图片上传时添加文字和图片水印技巧,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实现的功能特别适用于一些商城和图片站中,分享了图片在上传时添加文字和图片水印的技巧,供大家参考,具体内容如下

1. water.class.php

<?php
header('Content-Type:text/html;charset=utf-8');
/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
//给图片添加水印
Class Water{
 //开启水印
 private $watermark_on = '1';
  
 public $water_img;
  
 //水印位置
 public $pos = 1; 
  
 //压缩比
 public $pct = 80;
  
 //透明度
 public $quality = 80;
  
 public $text = '乐趣网zlblog.sinaapp.com';
  
 public $size = 12;
  
 public $color = '#000000';
  
 public $font = 'font.ttf';
  
 public function watermark( $img,$pos='',$out_img='',$water_img='',$text='' ){
  if(!$this->check($img) || !$this->watermark_on) return false;
   
  $water_img = $water_img ? $water_img : $this->water_img;
  //水印的开启状态
  $waterimg_on = $this->check($water_img) ? 1 : 0;
  //判断是否在原图上操作
  $out_img = $out_img ? $out_img : $img;
  //判断水印的位置
  $pos = $pos ? $pos : $this->pos;
  //水印文字
  $text = $text ? $text : $this->text;
   
   
  $img_info = getimagesize($img);
  $img_w = $img_info[0];
  $img_h = $img_info[1];
  //判断水印图片的类型
   
   
  if( $waterimg_on ){
   $w_info = getimagesize($water_img);
   $w_w = $w_info[0];
   $w_h = $w_info[1];
   if ( $img_w < $w_w || $img_h < $w_h ) return false;
   switch ( $w_info[2] ){
    case 1:
     $w_img = imagecreatefromgif($water_img);
     break;
    case 2:
     $w_img = imagecreatefromjpeg($water_img);
     break;
    case 3:
     $w_img = imagecreatefrompng($water_img);
     break;
   }
  }else{
   if( empty($text) || strlen($this->color)!=7 ) return FALSE;
   $text_info = imagettfbbox($this->size, 0, $this->font, $text);
   $w_w = $text_info[2] - $text_info[6];
   $w_h = $text_info[3] - $text_info[7];
  }
   
  //建立原图资源
   
  switch ( $img_info[2] ){
   case 1:
    $res_img = imagecreatefromgif($img);
    break;
   case 2:
    $res_img = imagecreatefromjpeg($img);
    break;
   case 3:
    $res_img = imagecreatefrompng($img);
    break;
  }
  //确定水印的位置
  switch ( $pos ){
   case 1:
    $x = $y =25;
    break;
   case 2:
    $x = ($img_w - $w_w)/2; 
    $y = 25;
    break;
   case 3:
    $x = $img_w - $w_w;
    $y = 25;
    break;
   case 4:
    $x = 25;
    $y = ($img_h - $w_h)/2;
    break;
   case 5:
    $x = ($img_w - $w_w)/2; 
    $y = ($img_h - $w_h)/2;
    break;
   case 6:
    $x = $img_w - $w_w;
    $y = ($img_h - $w_h)/2;
    break;
   case 7:
    $x = 25;
    $y = $img_h - $w_h;
    break;
   case 8:
    $x = ($img_w - $w_w)/2;
    $y = $img_h - $w_h;
    break;
   case 9:
    $x = $img_w - $w_w;
    $y = $img_h - $w_h;
    break;
   default :
    $x = mt_rand(25, $img_w - $w_w);
    $y = mt_rand(25, $img_h - $w_h);
  }
   
  //写入图片资源
  if( $waterimg_on ){
   imagecopymerge($res_img, $w_img, $x, $y, 0, 0, $w_w, $w_h, $this->pct); 
 }else{
  $r = hexdec(substr($this->color, 1,2));
  $g = hexdec(substr($this->color, 3,2));
  $b = hexdec(substr($this->color, 5,2));
  $color = imagecolorallocate($res_img, $r, $g, $b);
  imagettftext($res_img, $this->size, 0, $x, $y, $color, $this->font, $text); 
 }
  
 //生成图片类型
 switch ( $img_info[2] ){
  case 1:
   imagecreatefromgif($res_img,$out_img);
   break;
  case 2:
   //imagecreatefromjpeg($res_img,$out_img);
   imagejpeg($res_img,$out_img);
   break;
  case 3:
   imagejpeg($res_img,$out_img);
   break;
 }
 if(isset($res_img)) imagedestroy ($res_img);
 if(isset($w_img)) imagedestroy($w_img);
 return TRUE;
} 
 //验证图片是否存在
  private function check($img){
   $type = array('.jpg','.jpeg','.png','.gif');
   $img_type = strtolower(strrchr($img, '.'));
   return extension_loaded('gd') && file_exists($img) && in_array($img_type, $type);
  } 
}

2. test1.php

<?php
 
/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
//header('Content-Type:text/html;charset=utf-8');
include 'water.class.php';
$image = new Water();
$image->watermark('12.jpg',5);
//$image->watermark('12.jpg',1);

3.效果图

以上就是本文的全部内容,希望对大家学习PHP程序设计有所帮助。

相关文章

  • PHP Wrapper在SAE上的应用方法

    PHP Wrapper在SAE上的应用方法

    这篇文章主要介绍了PHP Wrapper在SAE上的应用方法,详细介绍了PHP Wrapper的功能、定义与使用技巧,进一步分析了在新浪SAE平台上进行文件写操作的具体实现技巧,需要的朋友可以参考下
    2016-05-05
  • php中通过正则表达式下载内容中的远程图片的函数代码

    php中通过正则表达式下载内容中的远程图片的函数代码

    下午抽空写了个用PHP正则表达式判断内容中的图片,下载并保存非本域名下的图片的程序
    2012-01-01
  • php强制更新图片缓存的方法

    php强制更新图片缓存的方法

    这篇文章主要介绍了php强制更新图片缓存的方法,实例分析了php结合javascript方法实现针对图片缓存的强制更新功能,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • 2020最新版 PhpStudy V8.1版本下载安装使用详解

    2020最新版 PhpStudy V8.1版本下载安装使用详解

    这篇文章主要介绍了2020最新版 PhpStudy V8.1版本下载安装使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • PHP封装的MSSql操作类完整实例

    PHP封装的MSSql操作类完整实例

    这篇文章主要介绍了PHP封装的MSSql操作类,以完整实例形式分析了php封装的各种常用的mssql数据库的操作,包括针对mssql数据库的连接与增删改查等,需要的朋友可以参考下
    2016-05-05
  • PHP递归调用数组值并用其执行指定函数的方法

    PHP递归调用数组值并用其执行指定函数的方法

    这篇文章主要介绍了PHP递归调用数组值并用其执行指定函数的方法,涉及php数组调用与函数执行的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • php实用代码片段整理

    php实用代码片段整理

    这篇文章主要介绍了php实用代码片段,整理归纳了php常见的编程技巧代码段,包括网页、字符串、图片、日期、数组及json等操作技巧,需要的朋友可以参考下
    2016-11-11
  • PHP与Web页面的交互示例详解二

    PHP与Web页面的交互示例详解二

    这篇文章主要介绍了PHP与Web页面的交互示例详解二,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • php异常与错误处理机制概念及使用介绍

    php异常与错误处理机制概念及使用介绍

    在php中,可以利用异常处理类“Exception”中内置的各种成员函数来获取并返回异常数据,例如getMessage()函数就可以返回异常的消息内容;也可以通过“try catch”语句和“throw”关键字来捕获程序中的异常
    2022-09-09
  • PHP获取访问设备信息的方法示例

    PHP获取访问设备信息的方法示例

    这篇文章主要介绍了PHP获取访问设备信息的方法,结合实例形式分析了php针对访问设备的浏览器类型、浏览器语言、操作系统类型、访客IP、访客地址等相关函数封装与使用技巧,需要的朋友可以参考下
    2019-02-02

最新评论