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