首页 > PHP教程 > php开发知识文章

PHP 生成带水印的图片的方法

本文主要介绍了PHP 生成带水印的图片的方法,欢迎大家的学习。

这里基于PHP的GD图形库,生成一张有水印的图片。

一、工具&素材

1.PHP环境要开启GD图形库扩展
2.准备多个小的水印图
3.获取预生成图片的背景色RGB值

二、代码

生成图片的代码

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/pic/' . $folder[$this->type] . '/' . rand(1, 38) . '.png';
return $targetFolder;
}
}

$image = new GenerateRandomImage(1, "PHP教程");
$image->createImg();

这样直接在页面中使用 <img src="http://aa.com/GenerateRandomImage.php" />来直接显示图片。

总结

这示例用php来生成一张图片,直接显示在浏览器,如果给imagepng加第二参数--路径,就能保存图片。

以上就是本文PHP 生成带水印的图片的方法的全部内容,希望对大家的学习有所帮助。

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。