前言:
今晚月黑风高,正直10点钟我要下班的时候,我一打开一楼的门,发现……玻璃展示柜子那恍恍惚惚有些黑影,我定睛一看!尽然……尽然…… 尽然是人!!!男人,还有女人!!吓死我了。然而基佬马君收到一个订货单,尼玛10点KFC不接受外送,这哥们9点59分打电话定外送,还住在上海滩花园来回至少半个小时。可怜的基佬……但是,基佬说这家是个妹纸!
妹纸怎么了!妹纸就可以9点59分59秒定外卖么!我那义正言辞的暴脾气。我抡起电瓶就冲了出去~马君教我骑车,强烈的保护欲告诉我,不能让妹纸饿肚子,历经艰辛万苦,冒着被卡车撞死和被劫色抛尸的危险……在路上,在路上,尼玛我电瓶剩了一格点,于是我果断换成了人工模式…
后来的后来,十分钟之前,我不认识你,你不认识我,我们还是陌生人。这样一次偶然的夜晚邂逅,月色隐约栖身于乌云中,缥缈晦涩…… 尼玛!!这妹子毛都长脸上了! 带不带着这么坑的!!卧槽。
正文:
好像扯了些没用的啊 ,说好的GD库呢?(王语双流可以止步于此了),那好,今天我们就来学习GD函数库PHP对图片文件的处理等比缩放和图片水印的实现。
等比缩放实现过程:
其中的过程实现是,通过计算获得原图与新图的长和宽,再利用imagecopyresampled();或者imagecopyresized();函数实现等比缩放。前者最广泛使用,获得的图像较为平滑,但执行速度稍慢,后者图像粗糙但执行速度快。
<?php $sourceFile="img/1.jpg"//;原图路径 $sourceNew="img/new.jpg";//生成图路径 $srcwidth="636";//原图宽度 $srcheight="592";//原图高度 $persentage=0.5;//缩放比例 /*获得新图大小信息*/ $NewWidth=ceil($srcwidth*$persentage);//大小进一取整 宽 $NewHeight=ceil($srcheight*$persentage);//新图高 $New_Image=imagecreatetruecolor($NewWidth,$NewHeight);//创建新图画布 $Image=imagecreatefromjpef($sourceFile);//载入原图 /**等比缩放,获得图像**/ imagecopyresampled($New_Image,$Image,0,0,0,0,$NewWidth,$NewHeight,$srcwidth,$srcheight); /**输出图像**/ imagejpeg($New_Image,$sourceNew); imagedestroy($NewHeight_Image,Image);//从内存中清除资源 ?>
有的同学要说,难道我每次都要打开图片获得长宽写入程序么?当然不是,我们有imagesize();函数,它能返回一个关于图片大小,图片格式信息的数组print_r();打印下看看吧。
水印功能实现过程:
实现过程,先载入图像,然后通过imagettfbbox();函数计算当使用“内容字体,倾斜角,大小”时候所需要的虚拟文本框大小。之后通过imagettftext();函数向其中X,Y坐标点写入文字。
<?php $size=20; $angle=0; $fontfile="simpo.ttf";//trutype字体文件路径 $text="www.cyanprobe.com"; $file_name="1.jpg"; $img=imagecreatefromjpeg($file_name);//载入图像 $white=imagecolorallocate($img,255,255,255);//分配颜色 $arr=imagettfbbox($size,$angle,$fontfile,$text);//计算虚拟文本像素区域数组 $width=arr[2]-arr[6]; $height=arr[7]-arr[3]; $x=100;$y=100;//水印位置 imagettftext($size,$angle,$fontfile,$x,$y,$text,$white); imagejpeg($img,"new.jpg"); imagedestroy($img); ?>
imagettfbbox() 返回一个含有 8 个单元的数组表示了文本外框的四个角:
0 | 左下角 X 位置 |
1 | 左下角 Y 位置 |
2 | 右下角 X 位置 |
3 | 右下角 Y 位置 |
4 | 右上角 X 位置 |
5 | 右上角 Y 位置 |
6 | 左上角 X 位置 |
7 | 左上角 Y 位置 |
看到imagettfbbox();数组返回的value意义,很好理解长宽怎么计算了吧,干脆背下来width=key:
2-6 height=key:7-3 PS:因为是十字坐标,所以存在负值。
后记:
家里蚊子好多的说,受不了了,洗洗睡了,敲了半天键盘。最近感觉学的东西都忘干净了,没时间练笔,打工的生活,干活睡觉,干活睡觉……好似上班挨到大限,很纠结。