>  기사  >  백엔드 개발  >  PHP에서 워터마크 이미지를 무작위로 생성하는 기능을 구현하기 위한 샘플 코드 공유

PHP에서 워터마크 이미지를 무작위로 생성하는 기능을 구현하기 위한 샘플 코드 공유

黄舟
黄舟원래의
2017-03-23 09:13:442046검색

이 글은 랜덤 워터마크 이미지 생성을 위한 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. 요약

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

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

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