php遍历目录输出目录及其下的所有图片文件

在做网站的时候,需要给文章内所有的图片添加上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‘,20,‘#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‘,20,‘#000000‘,\Think\Image::IMAGE_WATER_SOUTHEAST)->save($value2);
            }
        }
时间: 2024-12-27 23:59:48

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

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

需求:在该目录下有很多子目录(如下图,截图了部分),现要从该目录和所有子目录下找到所有扩展名为.meta的文件,并获取文件中第二行guid的值(': '后面的),然后将所有guid的值输出到另一文件中 .meta文件截图: 思路: 遍历当前目录的子目录,如果是文件并且扩展名为.meta,获取guid,写入到guid.txt:如果是子目录,则遍历子目录下的文件. 方法一: #!usr/bin/env python # -*- coding: utf-8 -*- import os outfile

遍历目录,目录下文件名存入文件

#encoding=utf-8 import os import os.path rootdir = "F:\python\wav" fobj = open('3.txt','w') for parent,dirnames,filenames in os.walk(rootdir): for filename in filenames: fobj.write('%s%s' % (filename,os.linesep)) fobj.close() 借鉴 import os for ro

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

原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 上一节我们把规则单独提取出来,方便了Makefile的维护,每个模块只需要给出关于自己的一些变量,然后再使用统一的规则Makefile.这一节我 们继续改进我们的Makefile,到目前为止我们的Makefile编译链接输出的目标都在源文件同目录下或模块Makefile同一目录下,当一个项 目大了之后,这样会显得很乱,寻找编译输出的文件也比较困难.既然Makefile本身就是按照我们的的规则来

从头开始写项目Makefile(七):统一目标输出目录

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 上一节我们把规则单独提取出来,方便了Makefile的维护,每个模块只需要给出关于自己的一些变量,然后再使用统一的规则Makefile.这一节我们继续改进我们的Makefile,到目前为止我们的Makefile编译链接输出的目标都在源文件同目录下或模块Makefile同一目录下,当一个项目大了之后,这样会显得很乱,寻找编译输出的文件也比较困难.既然Makefil

更改gradle的java的class文件输出目录的结构

gradle虽然也是一个convention over configuration的工具. gradle是一个新的构建工作可以更改它的convention. //指定gradle的class文件输出目录,同时去掉java的文件夹 output.classesDir = 'WebContent/WEB-INF/classes'

用一个MapReduce job实现去重,多目录输出功能

总结之前工作中遇到的一个问题. 背景: 运维用scribe从apache服务器推送过来的日志有重复记录,所以这边的ETL处理要去重,还有个需求是要按业务类型多目录输出,方便挂分区,后面的使用. 这两个需求单独处理都没有问题,但要在一个mapreduce里完成,需要一点技巧. 1.map输入数据,经过一系列处理,输出时: if(ttype.equals("other")){ file = (result.toString().hashCode() & 0x7FFFFFFF)%40

hadoop配置(4) --在每次运行时自动删除输出目录

运行 Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录(如 output)不能存在,否则会提示错误,因此运行前需要先删除输出目录.在实际开发应用程序时,可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作: Configuration conf = new Configuration(); Job job = new Job(conf); /* 删除输出目录 */ Path outputPath = new Path(args[1]); outputPath

vs文件属性(复制到输出目录)是什么意思

右击项目里的文件,选择属性(F4)会有复制到输出目录的选项. 它提供三项选择,如图: 如果选择始终复制或如果较新则复制会在该程序集的bin目录下生成该文件,如图:

修改文件输出目录后,提示配置错误(VS2010)

问题:C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(E:\WorkPro\MisIntubation\Debug\MisIntubationUI.exe) 与 Linker 的 OutputFile 属性值(E:\WorkPro\MisIntubation\dist\MisIntubationUI.exe)不匹配.这可