>  기사  >  백엔드 개발  >  PHP에서 워터마크 이미지를 무작위로 생성하는 기능을 구현하는 방법

PHP에서 워터마크 이미지를 무작위로 생성하는 기능을 구현하는 방법

墨辰丷
墨辰丷원래의
2018-05-24 16:31:512298검색

이 글에서는 주로 무작위 워터마크 사진을 생성하기 위한 PHP 관련 정보를 소개합니다. 관심 있는 친구는 PHP 기반

GD 그래픽 라이브러리를 참조하여 직접 사진을 생성할 수 있습니다. GD 라이브러리를 처음 접하고 예제를 통해 배울 수 있는 사람들에게만 해당됩니다.

1. 요구사항

웹사이트의 레이아웃은 MOOC 강좌 목록과 유사한 스타일을 사용합니다. 각 강좌는 배너 그림이고, 그림 아래에는 제목과 소개가 있습니다. 강좌 수가 많기 때문에 모든 강좌에 대해 특별히 제작된 배너가 없기 때문에 특정 규칙에 따라 이미지를 직접 생성해야 합니다. (원래는 p 레이아웃을 사용하여 문제를 해결하려고 했으나 p+img는 별로 그렇지 않습니다. 반응형 레이아웃으로 제어가 용이함) .

생성된 렌더링:

2. 도구 및 재료

1. PHP에서 GD 그래픽 라이브러리 확장 열기
2. 여러 개의 작은 워터마크 준비
3. RGB 값

3. 코드

이미지 생성 과정, 코드에 자세한 설명이 있습니다.

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

그래서 페이지에서 직접 b4485fdabe9c58439955263af7e4c137을 사용하여 이미지를 직접 표시할 수 있습니다.

참고: 처리 중에 문제가 발생했습니다. 워터마크 이미지가 투명한 png 이미지인 경우 워터마크 이미지를 이미지에 복사하면 흰색 배경으로 나타나며 이는 투명할 수 없습니다. 이미지 배경을 융합하므로 임의의 워터마크 이미지에 대해 동일한 색상 처리가 수행되어야 합니다.

4. 요약

이 작은 예에서는 이미지를 생성하고 브라우저에 직접 표시하는 간단한 단계를 사용합니다. 또한 경로인 두 번째 매개변수를 imagepng에 추가하여 이미지를 저장할 수도 있습니다. 따라서 예제의 GD 라이브러리에서 여러 가지 방법을 학습하면 그림을 만들거나 텍스트 워터마크를 추가하거나 그림에 이미지 워터마크를 추가할 수 있습니다.

위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.


관련 권장 사항:

PHP 구현 그림 워터마크클래스 캡슐화

phpcode of picture 워터마크

PHP 구현 워터마크클래스 패키지 코드 공유

위 내용은 PHP에서 워터마크 이미지를 무작위로 생성하는 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.