600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > php 合成图片 生成水印 文字。

php 合成图片 生成水印 文字。

时间:2023-03-26 07:42:41

相关推荐

php 合成图片 生成水印 文字。

相关image函数:

1、载入图像

imagecreatefrom 系列函数用于从文件或 URL 载入一幅图像,成功返回图像资源,失败则返回一个空字符串。

该系列函数有:

imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像

imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像

imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

imagecreatefromwbmp():创建一块画布,并从 WBMP 文件或 URL 地址载入一副图像

imagecreatefromstring():创建一块画布,并从字符串中的图像流新建一副图像

语法:

resource imagecreatefromgif( string filename )

resource imagecreatefromjpeg( string filename )

resource imagecreatefrompng( string filename )

resource imagecreatefromwbmp( string filename )

resource imagecreatefromstring( string image )

2、imagecopymerge()

imagecopymerge() 函数用于拷贝并合并图像的一部分,成功返回 TRUE ,否则返回 FALSE 。

语法:

bool imagecopymerge( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y,

int src_w, int src_h, int pct )

参数说明:

参数 说明

dst_im 目标图像

src_im 被拷贝的源图像

dst_x 目标图像开始 x 坐标

dst_y 目标图像开始 y 坐标,x,y同为 0 则从左上角开始

src_x 拷贝图像开始 x 坐标

src_y 拷贝图像开始 y 坐标,x,y同为 0 则从左上角开始拷贝

src_w (从 src_x 开始)拷贝的宽度

src_h (从 src_y 开始)拷贝的高度

pct 图像合并程度,取值 0-100 ,当 pct=0 时,实际上什么也没做,反之完全合并。

当为 pct = 100 时对于调色板图像本函数和 imagecopy() 完全一样

3、imagecolorallocatealpha — 为一幅图像分配颜色和透明度。

语法

int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )

imagecolorallocatealpha() 的行为和 imagecolorallocate() 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。

如果分配失败则返回 FALSE。

注意:此函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。

4、PHP 获取图像宽度函数:imagesx()

imagesx() 函数用于获取图像的宽度,单位为像素,返回值为整型。

语法:

int imagesx( resource image )

参数 image 为如 imagecreatetruecolor()、imagecreatefromjpeg() 等函数返回的图像资源。

PHP 获取图像高度函数:imagesy()

imagesy() 函数用于获取图像的高度,语法及用法同 imagesx() 。

语法:

int imagesy( resource image )

参数 image 为如 imagecreatetruecolor()、imagecreatefromjpeg() 等函数返回的图像资源。

实例

<?php

$img = imagecreatefrompng("runoob-logo.png");

echo "图像宽度:",imagesx( $img ),"<br />";

echo "图像高度:",imagesy( $img );

?>

5、hp中imagettftext()函数的使用: 用php实现在一张底图上写文字,共有8个参数,缺一不可:

(1)$image 这个是画布资源,无需再解释;

(2)$size,官方文档的解释是,字体大小,其长度单位依赖于GD库的版本,对于GD1来说是像素,

对于GD2来说是磅(point)。现在一般都是GD2了,那么这个磅究竟是什么意思呢?这涉及到字体设计的基本知识。

(3)$angle是旋转角度。这个官网解释的比较清楚,需要说明有两点:一是角度单位是度而不是弧度,二是旋转的中心点就是参数$x,$y。

(4)$x,$y 被绘制字符串的第一个字符的基线点。单位是像素。这里涉及到字体设计的基本知识--基线。这个点绝对不是左上角,而具体是什么取决于所使用的字体是如何设计的。对于宋体、楷体、黑体等常见的字体中的汉字,这个点大概位于字体的左下部分;而对于英文字母和标点符号,则各不相同。如下图:

(5)$color 字体的颜色。

(6)$fontfile 字体文件。也就是包含trueType字体字模的文件,如楷体字体文件simkai.ttf。这种文件的格式是有标准规范的,而且与平台无关。所以可以直接把Windows系统的字体文件拷贝到Linux下使用。

(7)$text 要渲染的字符串。需要注意必须是UTF-8编码的字符串。

6、PHP 输出图像

PHP 允许将图像以不同格式输出:

imagegif():以 GIF 格式将图像输出到浏览器或文件

imagejpeg():以 JPEG 格式将图像输出到浏览器或文件

imagepng():以 PNG 格式将图像输出到浏览器或文件

imagewbmp():以 WBMP 格式将图像输出到浏览器或文件

语法:

bool imagegif ( resource image [, string filename] )

bool imagejpeg ( resource image [, string filename [, int quality]] )

bool imagepng ( resource image [, string filename] )

bool imagewbmp ( resource image [, string filename [, int foreground]] )

参数说明:

image 欲输出的图像资源,如 imagecreate() 或 imagecreatefrom 系列函数的返回值

filename 可选,指定输出图像的文件名。如果省略,则原始图像流将被直接输出。

quality 可选,指定图像质量,范围从 0(最差质量,文件最小)到 100(最佳质量,文件最大),默认75 ,imagejpeg() 独有参数

foreground 可选,指定前景色,默认前景色是黑色,imagewbmp() 独有参数

小案例:

一、所需合成图片在本地

后台控制器:只需返回合成图片存储路径给前台页面就好。

public function agent(Request $request){// 合成图片存放路径$dira="public/uploads/accredit/";//存放文件夹if (! file_exists ( $dira )) {mkdir ( "$dira", 0777, true );}$path = $dira.'a.png';// 背景图$path_1 = 'public/static/home/images/accredit.png';// 头像图$path_2 = 'public/static/home/images/avatar.png';

//判断图片格式$ext= strrchr($pp,'.');//.jpeg .png .gif .wbmp// 按照原图的比例生成一个最大为60*60的缩略图并保存$dirv="public/uploads/avatar/"; //头像缩略图存放文件夹if (! file_exists ( $dirv )) {mkdir ( "$dirv", 0777, true );}require(ROOT_PATH.'/vendor/topthink/think-image/src/Image.php');require(ROOT_PATH.'/vendor/topthink/think-image/src/image/Exception.php');$image = \think\Image::open($path_2 );$path_3 = $image->thumb(60,60,Image::THUMB_CENTER)->save($dirv.$random.'tou'.'.jpg');if($path_3){$path_4=$dirv.$random.'tou'.'.jpg';}// 创建图片对象$image_1 = imagecreatefrompng($path_1);// 背景图// 头像缩略图if($ext=='.png'|| $ext=='.PNG'){$image_2 = imagecreatefrompng($path_4);}if($ext=='.gif'|| $ext=='.GIF'){$image_2 = imagecreatefromgif($path_4);}if($ext=='.jpg'|| $ext=='.jpeg'||$ext=='.JPG'||$ext=='.JPEG'){$image_2 = imagecreatefromjpeg($path_4);}if($ext=='.wbmp'||$ext=='.WBMP'){$image_2 = imagecreatefromwbmp($path_4);}// 合成图片//imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )---拷贝并合并图像的一部分//将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。imagecopymerge($image_1, $image_2, imagesx($image_1) / 2.35, imagesy($image_1) / 3.4, 0, 0, 60 , 60, 100);// 引入字体$font = 'public/static/home/fonts/simsun.ttc';$bloder = 'public/static/home/fonts/bolder.ttf';// 水印颜色和透明度$t_color1 = imagecolorallocatealpha($image_1, 190, 190, 190, 50);//最后一个参数值越大越透明// 水印循环for ($i = 1; $i < 100; $i = $i + 5) {$x = $i * 30;for ($k = 1; $k <100; $k = $k + 5 ){$y = $k * 27;imagefttext($image_1, 15, -45, $x, $y, $t_color1, $font, $res['name']);}}// 姓名、微信号、生份证、手机号、授权编号、授权有效期 颜色和透明度$t_color2 = imagecolorallocatealpha($image_1, 255, 248, 185, 0);//最后一个参数值越大越透明// 姓名imagefttext($image_1, 15, 0, 170, 284, $t_color2, $font, '姓名');// 微信号imagefttext($image_1, 17, 0, 170, 321, $t_color2, $font, '微信号');// 生份证$card=substr_replace('生份证号','******',-6);imagefttext($image_1, 16, 0, 170, 357, $t_color2, $font, $card);// 手机号imagefttext($image_1, 16, 0, 170, 395, $t_color2, $font, '手机号');//判断是否合成成功if(imagepng($image_1, $path)){//图片保存权限 可读可写可执行chmod($path,0777);// 删除所生成缩略图unlink($path_4);}//把路径返回给前台页面

$this->assign('path',$path);

return $this->fetch();

}

二、如果所需图片在线上,合成之前先下载到本地再进行合成。

Down:

class Down extends Controller{public function downloadImage($url, $path='public/uploads/download/'){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);$file = curl_exec($ch);curl_close($ch);$re= $this->saveAsImage($url, $file, $path);return $re;}private function saveAsImage($url, $file, $path){$filename = pathinfo($url, PATHINFO_BASENAME);$resource = fopen($path . $filename, 'a');fwrite($resource, $file);fclose($resource);return $filename;}}

在控制器的方法里面,在合成之前调用。

如:

$down=new Down();$pp=$down->downloadImage($path_2);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。