在做网站的时候,需要给文章内所有的图片添加上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 \Think\Image();
$image->open($value)->text('pengjun','./Public/consola.ttf',,'#000000',\Think\Image::IMAGE_WATER_SOUTHEAST)->save($value);
}
//php二维数组的遍历,利用两个foreach()遍历即可
$picArr2 = my_scandir('./Public/plugins\kindeditor\attached\image');
dump($picArr2);
foreach ($picArr2 as $key => $value1) {
foreach ($value1 as $key2 => $value2) {
$image = new \Think\Image();
$image->open($value2)->text('pengjun','./Public/consola.ttf',,'#000000',\Think\Image::IMAGE_WATER_SOUTHEAST)->save($value2);
}
}

php遍历目录输出目录及其下的所有图片文件的更多相关文章

  1. Python os模块实例之遍历目录及子目录指定扩展名的文件

    需求:在该目录下有很多子目录(如下图,截图了部分),现要从该目录和所有子目录下找到所有扩展名为.meta的文件,并获取文件中第二行guid的值(': '后面的),然后将所有guid的值输出到另一文件中 ...

  2. 【Tip】如何让引用的dll随附的xml注释文档、pdb调试库等文件不出现在项目输出目录中

    项目输出目录(bin/debug|release)中经常是这个样子: main.exemain.pdb a.dll a.xml b.dll b.pdb b.xml ... 其中xml是同名dll的注释 ...

  3. 修改XCode的Product的输出目录(有时不生效需看)

    通常在情一般都不建议使用绝对路径,因为写死之后,换环境,换平台,又要重新修改路径,因此常常使用相对路径,哪么相对路径通常使用的就是环境变量了. 在Mac 中,xcode 中build settings ...

  4. HDInsight 指定输出目录 insert overwrite

    基本语法 insert overwrite local directory '/example/demo/' select * from table; 可以格式化输出 insert overwrite ...

  5. makefile--统一目标输出目录 (六)

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 上一节我们把规则单独提取出来,方便了Makefile的维护,每个模块只需要给出关于自己的一些变量 ...

  6. java文件操作(输出目录、查看磁盘符)

    问题描述:     java操作文件,所有硬盘中所有文件路径 问题解决:     (1)查看所有磁盘文件 注:     如上所示,使用接口 File.listRoots()可以返回所有磁盘文件,通过f ...

  7. ASP.NET Core MVC压缩样式、脚本及总是复制文件到输出目录

    前言 在.NET Core之前对于压缩样式文件和脚本我们可能需要借助第三方工具来进行压缩,但在ASP.NET MVC Core中则无需借助第三方工具来完成,本节我们来看看ASP.NET Core MV ...

  8. webstorm配置编译sass的输出目录

    关于这个的问题,虽说不是很难,但还是踩了点小坑,下面就来介绍下如何使用webstorm配置编译sass的输出目录. 1.下载Ruby 2.使用Ruby安装sass 3.检测是否安装成功. 前面的几步很 ...

  9. VS生成项目时,有些文件无法复制到输出目录的解决办法

    有时候,我们在生成项目时,发现有些文件如:.jpg的图片文件,无法复制到输出目录中,此时会非常纠结,反复的清理项目,重新生成,依旧不能解决此问题.后来我打开.csproj的项目工程文件时,经过对比发现 ...

随机推荐

  1. Windows下Vundle安装

    鼠标手老是发作,没办法.想学习vim尽量减少编码时使用鼠标的频率.安装好gVim开始安装Vundle插件,总结下安装过程和各种遇到的坑: github上VundleVim倒是有说明 Windows S ...

  2. 龙芯3A上V8的编译与测试

    使用平台: loongson3a+debian6.0.3+linux2.6.36.3+gcc4.6.3 一: V8的下载 这里V8是从其官网上使用git下载的: (1)如果没有git和git-svn需 ...

  3. mysql中select into 和sql中的select into 对比

    现在有张表为student,我想将这个表里面的数据复制到一个为dust的新表中去.answer 01: create table dust select * from student;//用于复制前未 ...

  4. 记微信开发(自定义回复&关注回复)

    记微信开发(自定义回复&关注回复) 记微信开发(自定义回复&关注回复) code: <?php/** * wechat php test *///define your toke ...

  5. docker 使用Data Volume 共享文件

    Adding a data volume You can add a data volume to a container using the -v flag with the docker run  ...

  6. C++ 包含头文件 和 宏的使用 和 条件编译

    1 #define命令剖析 1.1   #define的概念     #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. ...

  7. C# Chart 折线图 多条数据展示

    private void btn_Click(object sender, EventArgs e) { DBHelper db = new DBHelper(); DataSet ds = db.G ...

  8. DataGridView添加复选框并向其中绑定值

    //DataGridview绑定数据 public void DataGridViewBandingData() { string year = this.CMB_year.SelectedValue ...

  9. JavaScript 问答 - No.1

    1     什么是JavaScript? JavaScript 是世界上最流行的脚本语言. JavaScript 是属于 web 的语言,它适用于 PC.笔记本电脑.平板电脑和移动电话. JavaSc ...

  10. C语言的本质(29)——C语言与汇编之寄存器和寻址方式

    x86的通用寄存器有eax.ebx.ecx.edx.edi.esi.这些寄存器在大多数指令中是可以任意选用的,比如movl指令可以把一个立即数传送到eax中,也可传送到ebx中.但也有一些指令规定只能 ...