在做网站的时候,需要给文章内所有的图片添加上logo,如何利用ThinkPHP来实现。
ThinkPHP为我们很好的提供了图像处理类,给文章中的所有图片加上水印的思路,上传的图片文件都保存在一个文件夹下面,我只需要获取该文件夹以及子文件夹下面的所有图片,遍历一次,加上水印即可,因此目前的难度只是怎么获取文件中的图片,并且遍历一次即可。[在ImagesController控制器中具体会出现二维数组的遍历];因此添加水印的图片问题就转换成了利用PHP遍历目录输出目录及其下的所有图片文件
//遍历目录输出目录及其下的所有文件 利用函数的递归解决 function my_scandir($dir){ $files=array(); if(is_dir($dir)){ if($handle=opendir($dir)){ while(($file=readdir($handle))!==false){ if($file!='.' && $file!=".."){ if(is_dir($dir."/".$file)){ $files[$file]=my_scandir($dir."/".$file); }else{ $files[]=$dir."/".$file; //获取文件的完全路径 $filesnames[]=$file; //获取文件的文件名称 } } } } } closedir($handle); return $files; //return $filesnames; }
接下来便是处理图片水印的问题了,
//对于一维数组的遍历 $picArr = my_scandir('./Public/Uploads/txtPig');//返回的是数组格式的数据 dump($picArr); foreach ($picArr as $value) { $image = new ThinkImage(); $image->open($value)->text('pengjun','./Public/consola.ttf',20,'#000000',ThinkImage::IMAGE_WATER_SOUTHEAST)->save($value); }
//php二维数组的遍历,利用两个foreach()遍历即可 $picArr2 = my_scandir('./Public/pluginskindeditorattachedimage'); dump($picArr2); foreach ($picArr2 as $key => $value1) { foreach ($value1 as $key2 => $value2) { $image = new ThinkImage(); $image->open($value2)->text('pengjun','./Public/consola.ttf',20,'#000000',ThinkImage::IMAGE_WATER_SOUTHEAST)->save($value2); } }