Maison >développement back-end >tutoriel php >Exemple de partage de code pour implémenter la fonction de génération aléatoire d'images de filigrane en PHP
Cet article présente principalement en détail les informations pertinentes de PHP pour générer des images de filigrane aléatoires. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à
Basé sur la bibliothèque graphique PHP GD, générez vous-même une image. Uniquement pour ceux qui sont nouveaux dans la bibliothèque GD et qui peuvent apprendre des exemples.
1. Exigences
La mise en page du site Web utilise un style similaire à la liste des cours du MOOC. Chaque cours est une image de bannière, comme. montré dans la figure Vous trouverez ci-dessous le titre et l'introduction. Comme il existe un grand nombre de cours, il n'y a pas de bannières spéciales conçues pour tous les cours, vous devez donc générer vous-même des images selon certaines règles (j'avais initialement prévu d'utiliser p layout pour résoudre le problème, mais p+img est dans responsive layoutPas très simple à contrôler).
Rendu généré :
2. Outils et matériaux
1. extension de bibliothèque
2. Préparez plusieurs petites images en filigrane
3. Obtenez la valeur RVB de la couleur d'arrière-plan de l'image pré-générée
3. Codez
Le processus de génération d'images est détaillé dans le code.
class GenerateRandomImage { /** @var integer 图片宽度 */ public $imgWidth = 272; /** @var integer 图片高度 */ public $imgHeight = 162; /** @var 根据type不同来生成不同的背景颜色,目前留个type分别为蓝色、紫色、黄色、绿色、灰色、土黄色 */ public $type = ''; /** @var 图片上要显示的文字 */ public $text = ''; /** @var integer 图片上文字的字体大小 */ public $fontSize = 16; public function construct($type, $text) { $this->type = $type; $this->text = $text; } /** * 创建生成随机图片 * @author bignerd * @since 2017-03-21T14:49:41+0800 */ public function createImg() { /** @var 创建一个指定图片大小的空调色板 $image = imagecreate($this->imgWidth, $this->imgHeight); $rgb = $this->getBackground($this->type); /** @var 为图片创建一个背景色 */ $backgroundColor = imagecolorallocate($image, $rgb['r'], $rgb['g'], $rgb['b']); /** @var 创建文字白色字体 */ $textColor = imagecolorallocate($image, 255, 255, 255); /** @var 字体文件路径 */ $font = $_SERVER['DOCUMENT_ROOT'].'/public/font/simhei.ttf'; $x = 18;//文字起始位置x坐标 $y = 50;//文字起始位置y坐标 /** 文字写入图片 */ $angle = 0;//角度0 imagettftext($image, $this->fontSize, $angle, $x, $y, $textColor, $font, $this->text); /** @var 水印图片路径 **/ $waterImgPath = $this->randWaterImage(); /** @var 获取图片信息,返回值$waterInfo[2] 为图片类型常量 */ $waterInfo = getimagesize($waterImgPath); /** @var 将图片类型常量转换为真正的类型,如png */ $waterType = image_type_to_extension($waterInfo[2], false);//获取文件类型 $createImageFunc = 'imagecreatefrom'.$waterType; /** @var 创建一个水印图片的副本 $createImageFunc 为根据图片类型来动态生成预调用的创建图片函数*/ $mask = $createImageFunc($waterImgPath); $posX = $this->imgWidth - $waterInfo[0];//水印图片,在目标图片中的位置的x坐标 $posY = $this->imgHeight - $waterInfo[1];//水印图片,在目标图片中的位置的y坐标 /** http请求响应类型设置为 image/png 以便直接显示为图片 */ header("Content-Type:image/png"); /** 水印图片复制到创建的image */ imagecopy($image, $mask, $posX, $posY, 0, 0, $waterInfo[0], $waterInfo[1]); imagepng($image);//输入图片到浏览器或者文件 imagedestroy($image);//销毁图片 } /** * 图片背景颜色的rgb值 * @author bignerd * @since 2017-03-21T14:50:16+0800 */ public function getBackground() { $background = [ '1'=>['r'=>0, 'g'=>160,'b'=>233], '2'=>['r'=>198,'g'=>0, 'b'=>110], '3'=>['r'=>237,'g'=>109,'b'=>0], '4'=>['r'=>33, 'g'=>148,'b'=>75], '5'=>['r'=>63, 'g'=>58, 'b'=>57], '6'=>['r'=>202,'g'=>162,'b'=>101], ]; return $background[$this->type]; } /** * 随机水印图片路径 * @author bignerd * @since 2017-03-21T14:51:00+0800 * @return 路径 */ public function randWaterImage() { $folder = [ '1'=>'product','2'=>'team','3'=>'architecture','4'=>'developer','5'=>'test','6'=>'engineer' ]; $targetFolder = $_SERVER['DOCUMENT_ROOT'].'/public/images/role/'.$folder[$this->type].'/'.rand(1,38).'.png'; return $targetFolder; } } $image = new GenerateRandomImage(1,"扛得住的MySql数据架构"); $image->createImg();
De cette façon, nous pouvons utiliser b4485fdabe9c58439955263af7e4c137 directement sur la page pour afficher directement l'image .
Remarque : J'ai rencontré un problème pendant le processus : si l'image en filigrane est une image png transparente, lorsque vous copiez l'image en filigrane sur une image, elle sera apparaître comme L'arrière-plan blanc ne peut pas être mélangé de manière transparente avec l'arrière-plan de l'image que nous avons défini, le même traitement des couleurs doit donc être effectué pour les images de filigrane aléatoires.
4. Résumé
Ce petit exemple utilise des étapes simples pour générer une image et l'afficher directement dans le navigateur. Elle peut également être donnée à imagepng<.> Ajoutez le deuxième paramètre, qui est le chemin, pour enregistrer l'image. Par conséquent, en apprenant plusieurs méthodes dans la bibliothèque GD dans les exemples, vous pouvez créer des images, ajouter des filigranes de texte ou des filigranes d'image aux images.
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!