PHP 生成水印图片
这段时间因工作需要,学习了下用PHP来给背景图上添加公司logo,宣传语之类的图片合并功能。话不多说,直接上代码。
<?php public function getImage()
{
$data_set = array(
"text" => "这是测试文字"
); // 项目根目录
$path = __DIR__."/路径/"; // 背景图
$tem_bg = __DIR__."/项目存放背景图得路径/背景图.jpg"; // 最终合成图片得路径和名字
$final_path = "/img/.../...之类得路径/用户ID-bg.jpg"; $bg = $path.$final_path;
copy($tem_bg, $bg); // 复制图片
list($bgWidth, $bgHeight) = getimagesize($bg); // 获取图片宽高 // 字体文件路径
$path_src = __DIR__."/字体文件路径"; // 如果是需要生成文字图片,则调用下面方法,生成文字图片,再合成
$text_image = $this->text_image_png($path, $path_src, $data_set); // 获取文字图片得宽高
list($textWidth, $textHeight) = getimagesize($text_image); // 将背景图和文字图合成
$this->synthetic($bg, 'jpg', $bgWidth, $bgHeight, $text_image, $textHeight, $textWidth, "bottom-center", 0, 210);
unlink($text_image); // 删除临时合成得文字图片 // 如果不需要生成文字图片,直接使用现有的图片,则执行下面的,这2种方式可共存
$image = __DIR__."/图片路径/xxx.png";
list($logoWidth, $logoHeight) = getimagesize($image);
// 将背景图和文字图合成
$this->synthetic($bg, 'jpg', $bgWidth, $bgHeight, $image, $logoHeight, $logoWidth, "bottom-center", 0, 210, 0, 10); // 如果需要合成多个图片,那就执行多次$this->synthetic()方法 return array("width" => $bgWidth, "height" => $bgHeight, "path" => $bg_name); // path就是合成后图片的路径
} /**
* 生成文字图片
* @param $path 项目根目录
* @param $font_path 字体文件路径
* @param $data_set 需要生成文字图片的文字
* @return string
*/
public function text_image_png($path, $font_path, $data_set)
{
$bgwidth = 640; // 文字图片的宽
$bgheight = 500; // 文字图片的高
$block = imagecreatetruecolor($bgwidth, $bgheight);//建立一个画板
$bg = imagecolorallocatealpha($block , 255 , 255 , 255 , 127);// 拾取一个完全透明的颜色,不要用imagecolorallocate拾色
$color = imagecolorallocate($block,137,54,20); //字体拾色
imagealphablending($block , false);//关闭混合模式,以便透明颜色能覆盖原画板
imagefill($block , 0 , 0 , $bg);//填充
$font_file = $font_path.'/fonts/simhei.ttf'; // 字体文件 $color = imagecolorallocate($block,255,228,116); //字体拾色 // 文字
$text = $data_set["text"];
imagettftext($block,50,0,260,150,$color,$font_file,$text); // 向图像写入文本 imagesavealpha($block , true);//设置保存png时保留透明通道信息
$image_path = $path."/临时文件路径/text.png";
imagepng($block, $image_path);//生成图片
imagedestroy($block); // 销毁画板 return $image_path;
} /**
* 合并图片
*
* @param $image // 背景图
* @param $mimeType // 合成后的图片类型
* @param $imgWidth // 背景的宽
* @param $imgHeight // 背景的高
* @param $watermark // 需要合成的图
* @param $watermarkHeight // 需要合成的高
* @param $watermarkWidth // 需要合成的宽
* @param string $position // 居中类型
* @param int $mt // 设置margin-top值
* @param int $mb // 设置margin-bottom值
* @param int $ml // 设置margin-left值
* @param int $mr // 设置margin-right值
* @param string $watermakMimeType // 合成后图片的类型
* @throws \Exception
*/
public function synthetic($image, $mimeType, $imgWidth, $imgHeight, $watermark, $watermarkHeight, $watermarkWidth, $position = "center", $mt = 0, $mb = 0, $ml = 0, $mr = 0, $watermakMimeType = "png")
{
// Calculate the watermark position
switch ($position) {
case "center":
$marginBottom = round($imgHeight / 2);
$marginRight = round($imgWidth / 2) - round($watermarkWidth / 2);
break; case "top-left":
$marginBottom = round($imgHeight - $watermarkHeight);
$marginRight = round($imgWidth - $watermarkWidth);
break; case "bottom-left":
$marginBottom = 5;
$marginRight = round($imgWidth - $watermarkWidth);
break; case "top-right":
$marginBottom = round($imgHeight - $watermarkHeight);
$marginRight = 5;
break; case "bottom-center":
$marginBottom = $mb;
$marginRight = round($imgWidth / 2) - round($watermarkWidth / 2) + $mr;
break; default:
$marginBottom = 2;
$marginRight = 2;
break;
} if($watermakMimeType == "png") {
$watermark = imagecreatefrompng($watermark); // 生成png图片
} else {
$watermark = imagecreatefromjpeg($watermark); // 生成jpg图片
} switch ($mimeType) {
case "jpeg":
case "jpg":
$createImage = imagecreatefromjpeg($image);
break; case "png":
$createImage = imagecreatefrompng($image);
break; case "gif":
$createImage = imagecreatefromgif($image);
break; default:
$createImage = imagecreatefromjpeg($image);
break;
} $sx = imagesx($watermark);
$sy = imagesy($watermark);
imagecopy(
$createImage,
$watermark,
imagesx($createImage) - $sx - $marginRight,
imagesy($createImage) - $sy - $marginBottom,
0,
0,
imagesx($watermark),
imagesy($watermark)
); // 拷贝图像的一部分 switch ($mimeType) {
case "jpeg":
case "jpg":
imagejpeg($createImage, $image); // 以 jpeg 格式将图像输出到浏览器或文件
break; case "png":
imagepng($createImage, $image); // 以 PNG 格式将图像输出到浏览器或文件
break; case "gif":
imagegif($createImage, $image); // 以 gif 格式将图像输出到浏览器或文件
break; default:
throw new \Exception("A watermark can only be applied to: jpeg, jpg, gif, png images ");
break;
}
}
以上就是将多个图片合成一张图片的过程。
PHP 生成水印图片的更多相关文章
- PHP生成随机水印图片
基于PHP的GD图形库,自己生成一张图片.仅限初识GD库,实例学习. 一.需求 网站的布局用到了类似慕课网课程列表的风格,每一个课程是一个banner图,图下面是标题加简介.因为课程的数量较大没有为所 ...
- C#(.net)水印图片的生成
/* * * 使用说明: * 建议先定义一个WaterImage实例 * 然后利用实例的属性,去匹配需要进行操作的参数 * 然后定义一个WaterImageManage实例 * 利用WaterI ...
- PHP 上传图片,生成水印,支持文字, gif, png
//admin_upfile.php <html> <meta http-equiv="Content-Type" content="text/html ...
- 前端水印图片及文字js教程
前端水印图片文字教程如下,复制代码修改图片地址即可看到效果,工作中遇到总结的,喜欢就关注下哦: <!DOCTYPE html><html> <head> <m ...
- PHP验证码生成及图片处理(GD库)
GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片,也可以给图片加水印. 本章实现了生成图片并绘画各种形状.图片的压缩.中文字符水印及图片水印 ...
- php生成文字图片效果
php生成文字图片效果最近看到php的GD功能,试着做了一个基本生成文字图片效果的代码: 显示文字图片页面:demo.php<?php$str = $_REQUEST['str'] ? $_RE ...
- [转载]java操作word生成水印
应用场景 为了保护版权或辨别文件的真伪,有时需要在生成的Word文件中动态添加水印,PageOffice组件的WaterMark类就封装了给在线编辑的Word文件添加水印这一功能,调用接口非常简单. ...
- [原创]java操作word生成水印
应用场景 为了保护版权或辨别文件的真伪,有时需要在生成的Word文件中动态添加水印,PageOffice组件的WaterMark类就封装了给在线编辑的Word文件添加水印这一功能,调用接口非常简单. ...
- php课程 8-28 php如何绘制生成显示图片
php课程 8-28 php如何绘制生成显示图片 一.总结 一句话总结:gd库轻松解决 1.php图片操作生成的图的两种去向是什么? 一种在页面直接输出,一种存进本地磁盘 2.php操作图片的库有哪些 ...
随机推荐
- 老男孩python学习自修第二十三天【多线程】
1. 线程的创建与运行 #!/usr/bin/env python # _*_ coding:UTF-8 _*_ from threading import Thread def foo(param1 ...
- LodopJS文档式模版的加载和赋值
Lodop模版有两种方法,一种是传统的JS语句,可以用JS方法里的eval来执行,一种是文档式模版,是特殊格式的base64码,此篇博文介绍文档式模版的加载,文档式模版的生成以及传统JS模版的生成加载 ...
- How to install Lion on PC
open 'InstallESD.dmg' open '/Volumes/Mac OS X Install ESD/BaseSystem.dmg' rm '/Volumes/Mac OS X Base ...
- APP需求调研、对比
二.人脸验证 1.芝麻认证 : 0.4元/次,需要企业企业认证.不能有与芝麻信用类似的业务,如:保险... 2.旷视 : 0.5/次.企业认证.业务限制 3. 百度人脸识别 : 企业认证. 4.科大 ...
- Nginx 磁盘IO的优化
L:132
- 【算法】串的模式匹配算法(KMP)
串的模式匹配算法 问题: 求子串位置的定位函数如何写? int index(SString S,SString T,int pos); 给定串S,子串T,问T在 ...
- Ubuntu16.04安装使用wps
Ubuntu16.04安装使用wps 1.wps官网下载并安装wps 此处以Debian安装包为例,官网下载路径 http://www.wps.cn/product/wpslinux/# 直接安装: ...
- setTimeout运行机制简要理解
经典例子辅助理解setTimeout工作原理 运行结果: 约1秒后输出:1,再过约1秒后输出:2,接着才立即输出:时间流逝了: 2002 毫秒最后输出:时间又流逝了: 2003 毫秒 在现有浏览器环境 ...
- PHP——运行shell命令|脚本
内置函数 PHP | 系统程序执行 exec shell_exec passthru system 配置 打开php.ini配置文件,并从disable_function将用到的函数从禁用中删除,然后 ...
- Docker最全教程
摘自雪雁大佬的博客,地址:https://www.cnblogs.com/codelove/default.html 目录: Docker最全教程——从理论到实战(一) Docker最全教程——从理论 ...