php图片怎么添加文字和字(华为自带提取图片文字)

打水印的操作是建立在已经上传完图片的前提下。

1、图片水印

打水印主要用到php图片怎么添加文字和字了imagecopymergephp图片怎么添加文字和字,图片合并。

imagecopymerge($im, $waterim, $srcx, $srcy, $watrx, $wary, $waterinfo[0], $waterinfo[1], $alpha);

参数说明:

$im, $waterim画布php图片怎么添加文字和字;$srcx, $srcy是指原图的起点(X轴php图片怎么添加文字和字,Y轴);$watrx, $wary是指水印图片的起点(X轴,Y轴);$waterinfo[0], $waterinfo[1]是指水印图片的宽度、高度;$alpha是指水印图片的透明度0到100;

作用就是$waterim合并到$im里边。

php图片怎么添加文字和字

图1 图片在中间水印效果

//原图$srcimg = "E:\phpweb\单语html10.21.11/kf7.jpg";//水印图片$waterpic="E:\phpweb\单语html10.21.11/logo.jpg";//打完水印以后保存的图片$savename="E:\phpweb\单语html10.21.11/kf.jpg";/* 打水印的位置 *1 左上 2 右上 3 中间 4左下 5 右下*/$position=5;//小于最小宽度 高度 不打水印$minwidth=300;$minheight=100;//水印的透明度 $alpha=30;img_water_mark($srcimg,$waterpic,$savename,$position,$alpha,$minwidth,$minheight);

img_water_mark *** (函数)

function img_water_mark($srcimg,$waterpic,$savename,$position,$alpha,$minwidh,$minheight){ $srcinfo = getimagesize($srcimg); //小于最小宽度 或者 高度不做任何操作 if($srcinfo[0]<$minwidh||$srcinfo[1]<$minheight){ return ''; } $waterinfo = getimagesize($waterpic); switch ($srcinfo[2]) { case 1: $im=imagecreatefromgif($srcimg); break; case 2: $im=imagecreatefromjpeg($srcimg); break; case 3: $im=imagecreatefrompng($srcimg); break; } switch ($waterinfo[2]) { case 1: $waterim=imagecreatefromgif($waterpic); break; case 2: $waterim=imagecreatefromjpeg($waterpic); break; case 3: $waterim=imagecreatefrompng($waterpic); break; } //水印图片的位置 switch ($position) { //1顶部居左 case 1: $x=$y=20; break; //2顶部居右 case 2: $x = $srcinfo[0]-$waterinfo[0]-20; $y = 20; break; //3居中 case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break; //4底部居左 case 4: $x = 20; $y = $srcinfo[1]-$waterinfo[1]-20; break; //5底部居右 case 5: $x = $srcinfo[0]-$waterinfo[0]-20; $y = $srcinfo[1]-$waterinfo[1]-20; break; default: $x=$y=20; } //合并图片 imagecopymerge($im, $waterim, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha); //保存图片 switch ($srcinfo[2]) { case 1: imagegif($im,$savename); break; case 2: imagejpeg($im,$savename); break; case 3: imagepng($im,$savename); break; } imagedestroy($im); imagedestroy($waterim); /* 直接预览 header('Content-Type: '.$srcinfo['mime']); switch ($srcinfo[2]) { case 1: imagegif($im); break; case 2: imagejpeg($im); break; case 3: imagepng($im); break; } */}

2、文字水印

主要用到imagettfbbox获取文字的宽度,高度,imagettftext写入文字

imagettfbbox($fonsize,$angle,$font,$txt)

参数说明:

$fonsize:字体大小;$angle:可以填写0;$font:用到的字体,我用到的 $font = "E:\phpweb\c4/HYZhuZiALaDingJ.ttf";$txt:要打水印的文字;

特别说明:$font字体存放路径,不能包含中文!

imagettfbbox返回值是数组,包含8个元素对应4个角的x,y坐标,我简单画了一下图方便理解

php图片怎么添加文字和字

图2 imagettfbbox返回值4角坐标

如图所示:坐标系统是向下,向右为正,并且左下角对应的坐标不是原点(0,0),这样我们可以很清晰地知道文字的宽高。

//原图$srcimg = "E:\phpweb\单语html10.21.11/kf7.jpg";//水印图片$waterpic="E:\phpweb\单语html10.21.11/logo.jpg";//打完水印以后保存的图片$savename="E:\phpweb\单语html10.21.11/kf.jpg";/* 打水印的位置 *1 左上 2 右上 3 中间 4左下 5 右下*/$position=5;//小于最小宽度 高度 不打水印$minwidth=300;$minheight=100;//水印的透明度 $alpha=100;img_water_mark($srcimg,$waterpic,$savename,$position,$alpha,$minwidth,$minheight);

imagettftext($img,$fonsize,$angle,$x,$y,$color,$font,$txt);

参数说明:

$img:画布中的图片,通过imagecreatefromjpeg($srcimg),这里根据图片mime不同使用的也不同,分为imagecreatefromgif,imagecreatefromjpeg,imagecreatefrompng其php图片怎么添加文字和字他的bmp之类的可以百分百的用不到,不必考虑;$fonsize:打水印的字体大小;$angle:角度直接填写0;$x,$y:在图片的起始坐标点($x,$y)开始打水印,添加文字;$color:字体的颜色rgb和透明度;$font:字体路径$font = "E:\phpweb\c4/HYZhuZiALaDingJ.ttf";$txt:要打印的文字;

说明:$x,$y并非是0,0开始,需要用到imagettfbbox返回值的坐标

文字水印效果图

php图片怎么添加文字和字

图3 文字在中间水印效果图

//原图$srcimg = "E:\phpweb\单语html10.21.11/kf7.jpg";//要打印的文字$watertxt="中文图片打水印mark演示";//打完水印以后保存的图片$savename="E:\phpweb\单语html10.21.11/kf.jpg";//字体路径 不能包含中文$font = "E:\phpweb\c4/HYZhuZiALaDingJ.ttf";/* 打水印的位置 *1 左上 2 右上 3 中间 4左下 5 右下*/$position=3;//小于最小宽度 高度 不打水印$minwidth=300;$minheight=100;//水印的透明度 $alpha=70;//字体大小$fonsize=20;//设置距离上下左右空白距离$blank=0;imagetxt($srcimg,$watertxt,$savename,$fonsize,$font,$position,$minwidth,$minheight,$alpha,$blank);

imagetxt *** 打水印

Function imagetxt($srcimg,$watertxt,$savename,$fonsize,$font,$position,$minwidth,$minheight,$alpha,$blank){ //获取图片的信息(得到图片的基本信息) $info = getimagesize($srcimg); //小于限制宽度 不打水印 if($info[0]<$minwidth||$info[1]<$minheight){ return $srcimg; } //计算要打印的文字所占的宽度高度 $txtarr=imagettfbbox($fonsize,0,$font,$watertxt); $txtwidth=$txtarr[2]-$txtarr[0]; $txtheight=$txtarr[3]-$txtarr[5]; //载入图片 switch ($info[2]) { case 1: $img=imagecreatefromgif($srcimg); break; case 2: $img=imagecreatefromjpeg($srcimg); break; case 3: $img=imagecreatefrompng($srcimg); break; } //设置字体的颜色rgb和透明度 $color = imagecolorallocatealpha($img,0,0,0,$alpha); //abs($num) 取$num的绝对值 //起点实际是 (abs($txtarr[0]),abs($txtarr[5])) 而不是(0,0); switch ($position) { //1顶部居左 case 1: $x=abs($txtarr[0])+$blank;$y=abs($txtarr[5])+$blank; break; //2顶部居右 case 2: $x = abs($txtarr[0])+$info[0]-$txtwidth-$blank; $y = abs($txtarr[5])+$blank; break; //3居中 case 3: $x = abs($txtarr[0])+($info[0]-$txtwidth)/2; $y = abs($txtarr[5])+ ($info[1]-$txtheight)/2; break; //4底部居左 case 4: $x = abs($txtarr[0])+$blank; $y = abs($txtarr[5])+$info[1]-$txtheight-$blank; break; //5底部居右 case 5: $x = abs($txtarr[0])+$info[0]-$txtwidth-$blank; $y =abs($txtarr[5])+$info[1]-$txtheight-$blank; break; } //写入文字 imagettftext($img,$fonsize,0,$x,$y,$color,$font,$watertxt); /*保存图片*/ /* switch ($info[2]) { case 1: imagegif($img,$savename); break; case 2: imagejpeg($img,$savename); break; case 3: imagepng($img,$savename); break; } */ //浏览器输出 header("Content-type:".$info['mime']); switch ($info[2]) { case 1: imagegif($img); break; case 2: imagejpeg($img); break; case 3: imagepng($img); break; } /*/ /*销毁图片*/ imagedestroy($img);}
发布于 2024-07-14 11:07:35
收藏
分享
海报
0 条评论
45
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~