Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie die Funktion zum zufälligen Generieren von Wasserzeichenbildern in PHP

So implementieren Sie die Funktion zum zufälligen Generieren von Wasserzeichenbildern in PHP

墨辰丷
墨辰丷Original
2018-05-24 16:31:512271Durchsuche

Dieser Artikel stellt hauptsächlich die relevanten Informationen von PHP zum Generieren zufälliger Wasserzeichenbilder vor. Interessierte Freunde können sich auf die

GD-Grafikbibliothek beziehen, die auf PHP basiert. Nur für diejenigen, die neu in der GD-Bibliothek sind und anhand von Beispielen lernen können.

1. Anforderungen

Das Layout der Website verwendet einen Stil, der der MOOC-Kursliste ähnelt. Jeder Kurs ist ein Bannerbild und unter dem Bild befindet sich der Titel und Einführung. Da es eine große Anzahl von Kursen gibt, gibt es keine speziellen Banner für alle Kurse. Daher müssen Sie Bilder nach bestimmten Regeln selbst erstellen (ursprünglich hatte ich geplant, p-Layout zu verwenden, um das Problem zu lösen, aber p + img ist nicht sehr gut einfach zu steuern im responsiven Layout).

Generierte Renderings:

2. Öffnen Sie PHP GD-Grafiken Bibliothekserweiterung 2. Bereiten Sie mehrere kleine Wasserzeichenbilder vor

3. Rufen Sie den Hintergrundfarb-RGB-Wert des vorgenerierten Bildes ab



3. Code

Der Prozess der Bildgenerierung wird im Code detailliert beschrieben.

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();

Damit wir es direkt auf der Seite verwenden können

3a8c5fdd545cc514d16910add8d7ff30

um das Bild direkt anzuzeigen.

Hinweis:

Während des Vorgangs ist ein Problem aufgetreten: Wenn das Wasserzeichenbild ein transparentes PNG-Bild ist, wird dies beim Kopieren des Wasserzeichenbilds in ein Bild der Fall sein erscheinen als Der weiße Hintergrund kann nicht transparent mit dem von uns festgelegten Bildhintergrund gemischt werden, daher muss die gleiche Farbverarbeitung für zufällige Wasserzeichenbilder durchgeführt werden. 4. Zusammenfassung

Dieses kleine Beispiel verwendet einfache Schritte, um ein Bild zu generieren und es direkt im Browser anzuzeigen. Es kann auch an imagepng Fügen Sie den zweiten Parameter hinzu, nämlich den Pfad, um das Bild zu speichern. Daher können Sie durch das Erlernen mehrerer Methoden in der GD-Bibliothek in den Beispielen Bilder erstellen, Textwasserzeichen oder Bildwasserzeichen zu Bildern hinzufügen.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.

Verwandte Empfehlungen:


PHP-Implementierung von

Bildwasserzeichen

Klassenkapselung

php
Code des Bildwasserzeichens

PHP-Implementierung von
Bildwasserzeichen

Klassenkapselungscode-Sharing


Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Funktion zum zufälligen Generieren von Wasserzeichenbildern in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn