Maison  >  Article  >  développement back-end  >  Comment utiliser le module MagickWand pour ajouter un filigrane aux images en PHP

Comment utiliser le module MagickWand pour ajouter un filigrane aux images en PHP

墨辰丷
墨辰丷original
2018-06-07 17:05:191623parcourir

Cet article présente principalement la méthode d'utilisation de PHP pour ajouter des filigranes aux images à l'aide du module MagickWand. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Lors de l'utilisation de la programmation PHP, il est souvent nécessaire d'ajouter un filigrane à l'image téléchargée pour déterminer le droit d'auteur et la source de l'image. Cependant, généralement l'emplacement du filigrane est le coin inférieur droit de l'image, mais images différentes Les niveaux de couleur sont différents. Parfois, le filigrane de nos images est le même que le niveau de couleur de l'image elle-même, ce qui rendra le filigrane discret

Le code suivant peut identifier automatiquement la couleur. niveaux de l'image et ajouter des images en fonction de la différence de niveau de couleur Filigrane, cela peut éviter les mêmes inconvénients du filigrane et de l'échelle de couleurs de l'image

<?php
 function add_wm($nmw_water, $src_file, $output_file, $x, $y) {
 if(file_exists($output_file))
 return;
 $w1 = MagickGetImageWidth($nmw_water);
 $h1 = MagickGetImageHeight($nmw_water);
 $nmw =NewMagickWand();
 MagickReadImage($nmw, $src_file);
 // 默认的加水印位置调整
 $lt_w = 50;
 $lt_h = 50;
 if($x == 0){
 $w = MagickGetImageWidth($nmw);
 $h = MagickGetImageHeight($nmw);
 $x = $w;
 $y = $h;
 }else{
 // 根据具体情况调整
 $lt_w = 30;
 $lt_h = 40;
 }
 MagickCompositeImage($nmw, $nmw_water, MW_OverCompositeOp, $x - $w1 - $lt_w, $y - $h1 - $lt_h);
 MagickWriteImage($nmw, $output_file);
 DestroyMagickWand($nmw);
 }
 // 还是groovy的eachFileRecurse好用啊
 function add_wm_recurse($nmw_water, $to_dir, $output_dir, $arr) {
 $dp = dir($to_dir);
 while($file=$dp->read()){
 if($file != &#39;.&#39; && $file != &#39;..&#39;){
 if(is_dir($to_dir . &#39;/&#39; . $file)){
  mkdir($output_dir . &#39;/&#39; . $file);
  add_wm_recurse($nmw_water, $to_dir . &#39;/&#39; . $file, $output_dir . &#39;/&#39; . $file, $arr);
 }else{
  if(!array_key_exists($to_dir . &#39;/&#39; . $file, $arr)){
  continue;
  }
  $sub_arr = $arr[$to_dir . &#39;/&#39; . $file];
  if($sub_arr){
  $x = intval($sub_arr[0]);
  $y = intval($sub_arr[1]);
  add_wm($nmw_water, $to_dir . &#39;/&#39; . $file, $output_dir . &#39;/&#39; . $file, $x, $y);
  }
 }
 }
 }
 $dp->close();
 }
 $to_dir = &#39;./resized&#39;;
 $output_dir = &#39;./output&#39;;
 // 这个是我用java的ImageIO遍历图片像素获取的符合裤子颜色的区域的坐标array(posX, posY)
 $arr = array(
 array(50, 50)
 );
 $water = &#39;./water.png&#39;;
 $nmw_water =NewMagickWand();
 MagickReadImage($nmw_water, $water);
 add_wm_recurse($nmw_water, $to_dir, $output_dir, $arr);
 DestroyMagickWand($nmw_water);
?>

Supplémentaire :

Module de traitement d'image PHP. Utilisation de MagickWand

MagickWand est un module PHP, utilisé pour accéder à la bibliothèque de traitement d'images d'ImageMagick. Ce qui suit est un extrait de code utilisant MagicWand :

$magick_wand=NewMagickWand();
MagickReadImage($magick_wand,&#39;rose.jpg&#39;);
$drawing_wand=NewDrawingWand();
DrawSetFont($drawing_wand,"/usr/share/fonts/bitstream-vera/Vera.ttf");
DrawSetFontSize($drawing_wand,20);
DrawSetGravity($drawing_wand,MW_CenterGravity);
$pixel_wand=NewPixelWand();
PixelSetColor($pixel_wand,"white");
DrawSetFillColor($drawing_wand,$pixel_wand);
if (MagickAnnotateImage($magick_wand,$drawing_wand,0,0,0,"Rose") != 0)
{
 MagickEchoImageBlob( $magick_wand );
}
else
{
 echo MagickGetExceptionString($magick_wand);
}
?>

Méthode d'installation :

1 Téléchargez php_magickwand_q16_st.dll pour 5.2.x
2. Placez-le dans le répertoire d'extension PHP <.>3. Ajoutez extension=php_magickwand_q16_st.dll au fichier php.ini
4. Redémarrez Apache

Résumé : ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il pourra être utile à l'apprentissage de chacun. aide.

Recommandations associées :

exemple de partage de classe de téléchargement de fichier php

Explication détaillée de la classe de pagination php avec des exemples

Explication détaillée de la classe de panier d'achat php avec une période de stockage d'un jour

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