Maison  >  Article  >  développement back-end  >  L'éditeur Baidu ajoute une fonction de filigrane d'image

L'éditeur Baidu ajoute une fonction de filigrane d'image

*文
*文original
2017-12-27 09:09:222294parcourir

Comment ajouter la fonction de filigrane d'image à Baidu Editor ? Il y a quelques jours, j'ai remplacé l'éditeur intégré de phpcms par l'éditeur Baidu UE, qui est très simple à utiliser. Cependant, il y a une chose dont je ne suis pas très satisfait, c'est que je ne peux pas ajouter de filigrane aux images téléchargées. .Après quelques recherches, je l'ai enfin réalisé. Partagez à tout le monde. J'espère que cela aide tout le monde.

Les images téléchargées par l'éditeur UEditor sont automatiquement extraites, mais les images n'ont pas de fonction de filigrane. L'éditeur les examinera ci-dessous.

L'éditeur UEditor n'a pas pour fonction de télécharger des images et d'ajouter des filigranes, et nécessite un développement secondaire. Cet exemple consiste à effectuer un développement secondaire de l'éditeur Baidu dans le système PHPCMS et à ajouter la fonction de téléchargement d'images et d'ajout de filigranes. .

Ouvrez d'abord le dossier php dans le répertoire de fichiers de l'éditeur UEditor, ouvrez Uploader.class.php, copiez la méthode PHPCMS d'ajout de filigranes, ajoutez-la à la fin de toutes les méthodes membres de cette classe, puis modifiez-la comme suit :

//图片加水印
public function watermark($source, $target = '', $w_pos = '', $w_img = '', $w_text = '99danji',$w_font = 8, $w_color = '#ff0000') {
  $this->w_img = 'watermark.png';
  $this->w_pos = 9;
  $this->w_minwidth = 400;
  $this->w_minheight = 200;
  $this->w_quality = 80;
  $this->w_pct = 85;
 
  $w_pos = $w_pos ? $w_pos : $this->w_pos;
  $w_img = $w_img ? $w_img : $this->w_img;
  //if(!$this->watermark_enable || !$this->check($source)) return false;
  if(!$target) $target = $source;
  //$w_img = PHPCMS_PATH.$w_img;
  //define('WWW_PATH', dirname(dirname(dirname(__FILE__)));
  $w_img = '../../../images/water/'.$w_img;
  $source_info = getimagesize($source);
  $source_w  = $source_info[0];
  $source_h  = $source_info[1];
  //if($source_w < $this->w_minwidth || $source_h < $this->w_minheight) return false;
  switch($source_info[2]) {
    case 1 :
      $source_img = imagecreatefromgif($source);
      break;
    case 2 :
      $source_img = imagecreatefromjpeg($source);
      break;
    case 3 :
      $source_img = imagecreatefrompng($source);
      break;
    default :
      return false;
  }
  if(!empty($w_img) && file_exists($w_img)) {
    $ifwaterimage = 1;
    $water_info  = getimagesize($w_img);
    $width    = $water_info[0];
    $height    = $water_info[1];
    switch($water_info[2]) {
      case 1 :
        $water_img = imagecreatefromgif($w_img);
        break;
      case 2 :
        $water_img = imagecreatefromjpeg($w_img);
        break;
      case 3 :
        $water_img = imagecreatefrompng($w_img);
        break;
      default :
        return;
    }
  } else {    
    $ifwaterimage = 0;
    $temp = imagettfbbox(ceil($w_font*2.5), 0, PC_PATH.&#39;libs/data/font/elephant.ttf&#39;, $w_text);
    $width = $temp[2] - $temp[6];
    $height = $temp[3] - $temp[7];
    unset($temp);
  }
  switch($w_pos) {
    case 1:
      $wx = 5;
      $wy = 5;
      break;
    case 2:
      $wx = ($source_w - $width) / 2;
      $wy = 0;
      break;
    case 3:
      $wx = $source_w - $width;
      $wy = 0;
      break;
    case 4:
      $wx = 0;
      $wy = ($source_h - $height) / 2;
      break;
    case 5:
      $wx = ($source_w - $width) / 2;
      $wy = ($source_h - $height) / 2;
      break;
    case 6:
      $wx = $source_w - $width;
   $wy = ($source_h - $height) / 2;
      break;
    case 7:
      $wx = 0;
      $wy = $source_h - $height;
      break;
    case 8:
      $wx = ($source_w - $width) / 2;
      $wy = $source_h - $height;
      break;
    case 9:
      $wx = $source_w - $width;
      $wy = $source_h - $height;
      break;
    case 10:
      $wx = rand(0,($source_w - $width));
      $wy = rand(0,($source_h - $height));
      break;       
    default:
      $wx = rand(0,($source_w - $width));
      $wy = rand(0,($source_h - $height));
      break;
  }
  if($ifwaterimage) {
    if($water_info[2] == 3) {
      imagecopy($source_img, $water_img, $wx, $wy, 0, 0, $width, $height);
    } else {
      imagecopymerge($source_img, $water_img, $wx, $wy, 0, 0, $width, $height, $this->w_pct);
    }
  } else {
    if(!empty($w_color) && (strlen($w_color)==7)) {
      $r = hexdec(substr($w_color,1,2));
      $g = hexdec(substr($w_color,3,2));
      $b = hexdec(substr($w_color,5));
    } else {
      return;
    }
    imagestring($source_img,$w_font,$wx,$wy,$w_text,imagecolorallocate($source_img,$r,$g,$b));
  }
  
  switch($source_info[2]) {
    case 1 :
      imagegif($source_img, $target);
      break;
    case 2 :
      imagejpeg($source_img, $target, $this->w_quality);
      break;
    case 3 :
      imagepng($source_img, $target);
      break;
    default :
      return;
  }
 
  if(isset($water_info)) {
    unset($water_info);
  }
  if(isset($water_img)) {
    imagedestroy($water_img);
  }
  unset($source_info);
  imagedestroy($source_img);
  return true;
}
 
public function check($image) {
  return extension_loaded(&#39;gd&#39;) && preg_match("/\.(jpg|jpeg|gif|png)/i", $image, $m) && file_exists($image) && function_exists(&#39;imagecreatefrom&#39;.($m[1] == &#39;jpg&#39; ? &#39;jpeg&#39; : $m[1]));
}

En comparant les parties que j'ai modifiées, puisque le filigrane phpcms peut être géré et défini en arrière-plan, la méthode de filigrane fournie avec phpcms obtient le chemin en lisant le fichier de configuration et en lisant les paramètres de la base de données pour obtenir les paramètres, ces emplacements doivent alors être définis manuellement.

Au fait, ajoutez une fonction dans la méthode upFile :


Copiez le code Le code est le suivant :


if ($this->watermark) {
$this->watermark($this->filePath,$this->filePath);
}

Ouvrez ensuite le fichier action_upload.php dans le répertoire php de l'éditeur UEditor Baidu, et ajoutez les paramètres permettant d'ajouter ou non un filigrane :

/* 上传配置 */
$base64 = "upload";
switch (htmlspecialchars($_GET[&#39;action&#39;])) {
  case &#39;uploadimage&#39;:
    $config = array(
      "pathFormat" => $CONFIG[&#39;imagePathFormat&#39;],
      "maxSize" => $CONFIG[&#39;imageMaxSize&#39;],
      "allowFiles" => $CONFIG[&#39;imageAllowFiles&#39;]
    );
    $fieldName = $CONFIG[&#39;imageFieldName&#39;];
    $watermark = true;
    break;

Ensuite, une phrase doit être remplacée par :

/* 生成上传实例对象并完成上传 */
$up = new Uploader($fieldName, $config, $base64, $watermark);

C'est tout. Cet article vise principalement à fournir des idées et des références.

Recommandations associées :

Comment intégrer tp3 dans l'éditeur Baidu ueditor ?

Introduction détaillée à la façon d'installer et d'utiliser l'éditeur php UEditor Baidu

yii2 Intégrer l'éditeur Baidu umeditor, yii2 intégrer le tutoriel umeditor_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