Maison  >  Article  >  développement back-end  >  Fonction de filigrane d'image PHP

Fonction de filigrane d'image PHP

墨辰丷
墨辰丷original
2018-06-05 15:01:142736parcourir

Cet article présente principalement la fonction de filigrane d'image PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

L'exemple de code est le suivant :

<?php
/**
 * 功能:给一张图片加上水印效果
 *      $i 要加水印效果的图片
 *      $t 水印文字
 *      $size 文字大小
 *      $pos 水印的位置
 *      $color 文字的颜色
 *      $flag 是布尔值,主要用来区分是不是原图上加水印
 *      $type 如果$flag等于false 则新图上加上水印 新文件名为 原名_txt.jpg
 */
function txt($i,$t=&#39;版权所有&#39;,$size=25,$pos=5,$color=&#39;rand&#39;,$flag=true,$type=&#39;_txt&#39;){
  $img = imagecreatefromjpeg($i);
  $w = imagesx($img);
  $h = imagesy($img);
  $font = dirname(__FILE__).&#39;/font/ls.ttf&#39;;
  $ps = imagettfbbox($size,0,$font,$t);
  $tw = $ps[4];
  $th = abs($ps[5]);
  switch($pos){
    case 1:break;  
    case 2:break;  
    case 3:break;  
    case 4:break;  
    case 5:$x=($w-$tw)/2;$y=($h-$th)/2+$th;break;  
    case 6:break;  
    case 7:break;  
    case 8:break;  
    case 9:break;  
    default:break;
  }
  $c = getcolor($img,$color);
  imagettftext($img,$size,0,$x,$y,$c,$font,$t);
  if($flag){
    imagejpeg($img,$i); 
  }else{
    $ext = ext($i);
    $ppp = rtrim($i,&#39;.&#39;.$ext);
    $ppp = $ppp.$type.&#39;.&#39;.$ext;
    imagejpeg($img,$ppp);
  }
}
 
function getcolor($i,$c=&#39;rand&#39;,$a=50){
  $cc = &#39;&#39;;
  switch($c){
    case &#39;white&#39;:$cc=imagecolorallocatealpha($i,255,255,255,$a);break;
    case &#39;black&#39;:$cc=imagecolorallocatealpha($i,0,0,0,$a);break;
    case &#39;red&#39;:$cc=imagecolorallocatealpha($i,255,0,0,$a);break;
    case &#39;green&#39;:$cc=imagecolorallocatealpha($i,0,255,0,$a);break;
    case &#39;blue&#39;:$cc=imagecolorallocatealpha($i,0,0,255,$a);break;
    case &#39;orange&#39;:$cc=imagecolorallocatealpha($i,0xff,0x66,0x33,$a);break;
    case &#39;yellow&#39;:$cc=imagecolorallocatealpha($i,255,255,0,$a);break;
    case &#39;rand&#39;:$cc=imagecolorallocatealpha($i,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255),$a);break;
    default:
      $cs = substr($c,1);
      $ok = str_split($cs,2);
      $cc = imagecolorallocatealpha($i,hexdec($ok[0]),hexdec($ok[1]),hexdec($ok[2]),$a);
    break;   
  }
  return $cc;
}
 
 
/**
 * 功能是:返回扩展名
 */
 
function ext($f){
  $exts = explode(&#39;.&#39;,$f);
  return end($exts);
}
 
/**
 * 功能是:返回文件名,不含扩展名
 */
function name($f){
  $s = explode(&#39;/&#39;,$f);
  $fn = end($s);
  return rtrim($fn,&#39;.&#39;.ext($f));
}

Regardons un autre code qui prend en charge l'ajout de filigranes aux images de deux manières : images et du texte. Les images prennent en charge les formats GIF, PNG et JPG, et les images en filigrane prennent en charge PNG et GIF

function setWater($imgSrc,$markImg,$markText,$TextColor,$markPos,$fontType,$markType)
{

  $srcInfo = @getimagesize($imgSrc);
  $srcImg_w  = $srcInfo[0];
  $srcImg_h  = $srcInfo[1];
    
  switch ($srcInfo[2]) 
  { 
    case 1: 
      $srcim =imagecreatefromgif($imgSrc); 
      break; 
    case 2: 
      $srcim =imagecreatefromjpeg($imgSrc); 
      break; 
    case 3: 
      $srcim =imagecreatefrompng($imgSrc); 
      break; 
    default: 
      die("不支持的图片文件类型"); 
      exit; 
  }
    
  if(!strcmp($markType,"img"))
  {
    if(!file_exists($markImg) || empty($markImg))
    {
      return;
    }
      
    $markImgInfo = @getimagesize($markImg);
    $markImg_w  = $markImgInfo[0];
    $markImg_h  = $markImgInfo[1];
      
    if($srcImg_w < $markImg_w || $srcImg_h < $markImg_h)
    {
      return;
    }
      
    switch ($markImgInfo[2]) 
    { 
      case 1: 
        $markim =imagecreatefromgif($markImg); 
        break; 
      case 2: 
        $markim =imagecreatefromjpeg($markImg); 
        break; 
      case 3: 
        $markim =imagecreatefrompng($markImg); 
        break; 
      default: 
        die("不支持的水印图片文件类型"); 
        exit; 
    }
      
    $logow = $markImg_w;
    $logoh = $markImg_h;
  }
    
  if(!strcmp($markType,"text"))
  {
    $fontSize = 16;
    if(!empty($markText))
    {
      if(!file_exists($fontType))
      {
        return;
      }
    }
    else {
      return;
    }
      
    $box = @imagettfbbox($fontSize, 0, $fontType,$markText);
    $logow = max($box[2], $box[4]) - min($box[0], $box[6]);
    $logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
  }
    
  if($markPos == 0)
  {
    $markPos = rand(1, 9);
  }
    
  switch($markPos)
  {
    case 1:
      $x = +5;
      $y = +5;
      break;
    case 2:
      $x = ($srcImg_w - $logow) / 2;
      $y = +5;
      break;
    case 3:
      $x = $srcImg_w - $logow - 5;
      $y = +15;
      break;
    case 4:
      $x = +5;
      $y = ($srcImg_h - $logoh) / 2;
      break;
    case 5:
      $x = ($srcImg_w - $logow) / 2;
      $y = ($srcImg_h - $logoh) / 2;
      break;
    case 6:
      $x = $srcImg_w - $logow - 5;
      $y = ($srcImg_h - $logoh) / 2;
      break;
    case 7:
      $x = +5;
      $y = $srcImg_h - $logoh - 5;
      break;
    case 8:
      $x = ($srcImg_w - $logow) / 2;
      $y = $srcImg_h - $logoh - 5;
      break;
    case 9:
      $x = $srcImg_w - $logow - 5;
      $y = $srcImg_h - $logoh -5;
      break;
    default: 
      die("此位置不支持"); 
      exit;
  }
    
  $dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
    
  imagecopy ( $dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);
    
  if(!strcmp($markType,"img"))
  {
    imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
    imagedestroy($markim);
  }
    
  if(!strcmp($markType,"text"))
  {
    $rgb = explode(&#39;,&#39;, $TextColor);
      
    $color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
    imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType,$markText);
  }
    
  switch ($srcInfo[2]) 
  { 
    case 1:
      imagegif($dst_img, $imgSrc); 
      break; 
    case 2: 
      imagejpeg($dst_img, $imgSrc); 
      break; 
    case 3: 
      imagepng($dst_img, $imgSrc); 
      break;
    default: 
      die("不支持的水印图片文件类型"); 
      exit; 
  }
    
  imagedestroy($dst_img);
  imagedestroy($srcim);
}

Résumé  : ce qui précède représente l'intégralité du contenu de cet article, J’espère que cela pourra être utile à l’étude de chacun.

Recommandations associées :

Analyse des groupes capturants et des groupes non capturants dans les expressions régulières PHP

Comment générer du code de vérification d'image en PHP

Explication détaillée sur l'utilisation de la fonction spl_autoload_register() en PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn