国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Traitement du filigrane d'image PHP

La génération d'un filigrane est l'étape la plus simple de toute la technologie. Localiser l'emplacement du filigrane nécessite quelques connaissances géométriques, initialement superficielles.

Dans le dernier chapitre, nous avons appris la technologie de recadrage d'image. Le filigrane n’est qu’une petite déformation de la technologie de recadrage d’image.

Un peu de connaissances géométriques clés?:

1. Taille de l'image

2. à quelles coordonnées l'image est placée

3. La largeur et hauteur de l'image

Le c?ur de la technologie de filigrane d'image équivaut à deux images : une grande image ; Placez la petite image quelque part dans la plus grande image.

La technologie Watermark est la technologie la plus simple en la matière. La méthode de mise en ?uvre est la suivante?:

1. Ouvrez l'image originale (également appelée image cible de l'opération)

2. Ouvrez l'image du filigrane (également appelée image source du filigrane)

3. Utilisez imagecopymerge pour fusionner la petite image dans la position spécifiée de la grande image

4. Sortez l'image

.5 Détruire les ressources

1. Filigrane d'image simple

Image cible qui doit être filigranée (en supposant qu'elle soit stockée dans d:/ www/img/meinv.jpg sur mon ordinateur), l'image est la suivante?:

99.png

L'image du logo qui doit être ajoutée (en supposant qu'elle soit stockée dans d:/ www/img/logo.png sur mon ordinateur), l'image est la suivante :

document_2015-09-22_56010df4559d3.png

Le plus important est d'utiliser cette fonction :

bool imagecopymerge ( ressource $ image cible, ressource $ image source, int $ cible commen?ant x, int $target début y, int $source x, int $source y, int $source largeur, int $source hauteur, int $transparence )

Remarque?:
Transparence La valeur est un entier compris entre 0 et 100. La différence entre imagecopy et imagecopymerge est que l’un a de la transparence et l’autre non.

Suivez les étapes résumées et appliquez une méthode simple?:

<?php
//打開(kāi)目標(biāo)圖片
$dst = imagecreatefrompng('/upload/course/000/000/002/5833ebba648cf229.png');

//打開(kāi)Logo來(lái)源圖片
$src = imagecreatefrompng('/upload/course/000/000/002/5833ebe90cc11285.png');

//得到目標(biāo)圖片的寬高
$dst_info = getimagesize('5833ebba648cf229.png');

//得到logo圖片的寬高
$src_info = getimagesize('5833ebe90cc11285.png');

//放到最右下腳可得出圖片水印圖片需要開(kāi)始的位置即:
//x點(diǎn)位置:需要大圖的寬 - 小圖的寬;
//y點(diǎn)位置:放大圖的高 - 小圖的高

$dst_x = $dst_info[0] - $src_info[0];

$dst_y = $dst_info[1] - $src_info[1];

//要將圖片加在右下腳
imagecopymerge($dst, $src, $dst_x, $dst_y, 0, 0, $src_info[0], $src_info[1], 100);

header('Content-type:image/png');
imagepng($dst);

imagedestroy($dst);

imagedestroy($src);

?>

Voyons l'effet final comme suit?:

11.png

2. Faites une fonction de filigrane d'image intelligente

1. Nous pouvons créer une fonction qui ouvre automatiquement les images

Nous avons tous déjà appris les fonctions de création d'images ou d'ouverture d'images?:

1.

2.imagecreatetruecolor

3.imagecreatefromjpeg etc.

Raisonnons. Si nous pouvons trouver un moyen d'obtenir le type MIME de l'image, nous pouvons simplement trouver la fonction pour ouvrir le fichier en fonction du type MIME.

Par conséquent, cette étape est divisée en deux parties?:

1. Récupérez le type MIME du fichier et le type de retour.

2. Passez le chemin, ouvrez la fonction et renvoyez la ressource.

Par conséquent, nous pouvons transformer les deux blocs ci-dessus en deux fonctions.

Saisissez le chemin de l'image, renvoyez la largeur, la hauteur et le type MIME de l'image dans un tableau et utilisez les paramètres correspondants si nécessaire.

Nous pouvons passer le type MIME au tableau associatif de types dans $data. Le code est le suivant :

function getImageInfo($path) {
    $info = getimagesize($path);
    $data['width'] = $info[0];
    $data['height'] = $info[1];
    $data['type'] = $info['mime'];
    return $data;
}

La fonction pour ouvrir un fichier, passer le type d'une image, passer le chemin d'une image, l'image sera ouverte, et le type de ressource sera renvoyé.

Dans l'exemple suivant, $type est jugé à l'aide de switch...case. S'il s'agit d'une imagejpeg, imagecreatefromjpeg est utilisé pour ouvrir le fichier spécifié par le chemin dans $path. Enfin, un type de ressource est renvoyé.

function openImg($path, $type) {
    switch ($type) {
        case 'image/jpeg':
        case 'image/jpg':
        case 'image/pjpeg':
            $img = imagecreatefromjpeg($path);
            break;
        case 'image/png':
        case 'image/x-png':
            $img = imagecreatefrompng($path);
            break;
        case 'image/gif':
            $img = imagecreatefromgif($path);
            break;
        case 'image/wbmp':
            $img = imagecreatefromwbmp($path);
            break;
        default:
            exit('圖片類(lèi)型不支持');
    }
    return $img;
}

Calculer automatiquement la position?:

Nous pouvons diviser la position en 10 valeurs, allant de 0 à 9.

Nous utilisons des dessins pour représenter les positions?:

document_2015-09-22_5600ef919671d.png


Remarque?:
0 est une position aléatoire et peut appara?tre n'importe où sur la page. Mais cela ne peut pas dépasser le cadre du tableau. La position de

0 est :

x = 0 至 (大圖寬 - 小圖寬)
y = 0 至  (大圖高 - 小圖高)

La position de 1 est :

x = 0 
y = 0

La position de 2 est :

x = (大圖寬 - 小圖寬) /2 
y = 0

La position de 3 est :

La position de
x = 大圖寬 - 小圖寬
y = 0

4 est :

x = 0
y = (大圖高 - 小圖高) / 2

... ...et ainsi de suite.

Raisonnons sur le code d'implémentation de 0-9?:

 switch($pos){
        case 1:
            $x=0;
            $y=0;
            break;
        case 2:
            $x=ceil(($info['width']-$logo['width'])/2);
            $y=0;
            break;
        case 3:
            $x=$info['width']-$logo['width'];
            $y=0;
            break;
        case 4:
            $x=0;
            $y=ceil(($info['height']-$logo['height'])/2);
            break;
        case 5:
            $x=ceil(($info['width']-$logo['width'])/2);
            $y=ceil(($info['height']-$logo['height'])/2);
            break;
        case 6:
            $x=$info['width']-$logo['width'];
            $y=ceil(($info['height']-$logo['height'])/2);
            break;
        case 7:
            $x=0;
            $y=$info['height']-$logo['height'];
            break;
        case 8:
            $x=ceil(($info['width']-$logo['width'])/2);
            $y=$info['height']-$logo['height'];
            break;
        case 9:
            $x=$info['width']-$logo['width'];
            $y=$info['height']-$logo['height'];
            break;
        case 0:
        default:
            $x=mt_rand(0,$info['width']-$logo['width']);
            $y=mt_rand(0,$y=$info['height']-$logo['height']);
            break;
    }

Appelons enfin le code de fusion, sortie et destruction d'images :

imagecopymerge($dst,$src,$x,$y,0,0,$logo['width'],$logo['height'],$tm);

Nous intégrerons le code final Après cela , je vais vous donner l'expérience pour voir l'effet :

<?php

water('/upload/course/000/000/002/5833ebba648cf229.png','/upload/course/000/000/002/5833ebe90cc11285.png',0,50);

function water($img,$water,$pos=9,$tm=100){

   $info=getImageInfo($img);

   $logo=getImageInfo($water);

   $dst=openImg($img,$info['type']);
   $src=openImg($water,$logo['type']);


   switch($pos){
       case 1:
           $x=0;
           $y=0;
           break;
       case 2:
           $x=ceil(($info['width']-$logo['width'])/2);
           $y=0;
           break;
       case 3:
           $x=$info['width']-$logo['width'];
           $y=0;
           break;
       case 4:
           $x=0;
           $y=ceil(($info['height']-$logo['height'])/2);
           break;
       case 5:
           $x=ceil(($info['width']-$logo['width'])/2);
           $y=ceil(($info['height']-$logo['height'])/2);
           break;
       case 6:
           $x=$info['width']-$logo['width'];
           $y=ceil(($info['height']-$logo['height'])/2);
           break;

       case 7:
           $x=0;
           $y=$info['height']-$logo['height'];
           break;
       case 8:
           $x=ceil(($info['width']-$logo['width'])/2);
           $y=$info['height']-$logo['height'];
           break;
       case 9:
           $x=$info['width']-$logo['width'];
           $y=$info['height']-$logo['height'];
           break;
       case 0:
       default:
           $x=mt_rand(0,$info['width']-$logo['width']);
           $y=mt_rand(0,$y=$info['height']-$logo['height']);
           break;

   }
   imagecopymerge($dst,$src,$x,$y,0,0,$logo['width'],$logo['height'],$tm);


   imagejpeg($dst);

   imagedestory($dst);
   imagedestory($src);

}



   function openImg($path,$type){
       switch($type){
           case 'image/jpeg':
           case 'image/jpg':
           case 'image/pjpeg':
               $img=imagecreatefromjpeg($path);
               break;
           case 'image/png':
           case 'image/x-png':
               $img=imagecreatefrompng($path);
               break;
           case 'image/gif':
               $img=imagecreatefromgif($path);
               break;
           case 'image/wbmp':
               $img=imagecreatefromwbmp($path);
               break;
           default:
               exit('圖片類(lèi)型不支持');


       }
       return $img;
   }




?>

Cet article est uniquement destiné au personnel technique pour communiquer, apprendre et échanger des technologies.

Images utilisées dans cet article?:

Les photos de Mme Fan Bingbing ne sont pas destinées à un usage commercial. Tous les droits de propriété appartiennent à Mme Fan Bingbing et aux institutions associées.

Le logo utilisé dans cet article appartient à Baidu.

C'est une déclaration?!


Formation continue
||
<?php water('zxy.jpg','logo.gif',0,50); function water($img,$water,$pos=9,$tm=100){ $info=getImageInfo($img); $logo=getImageInfo($water); $dst=openImg($img,$info['type']); $src=openImg($water,$logo['type']); switch($pos){ case 1: $x=0; $y=0; break; case 2: $x=ceil(($info['width']-$logo['width'])/2); $y=0; break; case 3: $x=$info['width']-$logo['width']; $y=0; break; case 4: $x=0; $y=ceil(($info['height']-$logo['height'])/2); break; case 5: $x=ceil(($info['width']-$logo['width'])/2); $y=ceil(($info['height']-$logo['height'])/2); break; case 6: $x=$info['width']-$logo['width']; $y=ceil(($info['height']-$logo['height'])/2); break; case 7: $x=0; $y=$info['height']-$logo['height']; break; case 8: $x=ceil(($info['width']-$logo['width'])/2); $y=$info['height']-$logo['height']; break; case 9: $x=$info['width']-$logo['width']; $y=$info['height']-$logo['height']; break; case 0: default: $x=mt_rand(0,$info['width']-$logo['width']); $y=mt_rand(0,$y=$info['height']-$logo['height']); break; } imagecopymerge($dst,$src,$x,$y,0,0,$logo['width'],$logo['height'],$tm); imagejpeg($dst); imagedestory($dst); imagedestory($src); } function openImg($path,$type){ switch($type){ case 'image/jpeg': case 'image/jpg': case 'image/pjpeg': $img=imagecreatefromjpeg($path); break; case 'image/png': case 'image/x-png': $img=imagecreatefrompng($path); break; case 'image/gif': $img=imagecreatefromgif($path); break; case 'image/wbmp': $img=imagecreatefromwbmp($path); break; default: exit('圖片類(lèi)型不支持'); } return $img; } ?>
soumettreRéinitialiser le code