从指定目录拉取所有图像,然后显示它们

Posted

技术标签:

【中文标题】从指定目录拉取所有图像,然后显示它们【英文标题】:Pull all images from a specified directory and then display them 【发布时间】:2012-08-10 14:01:42 【问题描述】:

如何显示指定目录的图片?就像我想显示一个目录中的所有 png 图像一样,在我的情况下,我的目录是 media/images/iconized。

我试着环顾四周,但似乎没有一个适合我真正需要的。

但这是我的尝试。

$dirname = "media/images/iconized/";
$images = scandir($dirname);
$ignore = Array(".", "..");
foreach($images as $curimg)
    if(!in_array($curimg, $ignore)) 
        echo "<img src='media/images/iconized/$curimg' /><br>\n";
    

希望这里有人可以提供帮助。我愿意接受任何想法、建议和建议,谢谢。

【问题讨论】:

您的尝试有什么问题?您需要提供有关您遇到的问题的更多信息。 这段代码对我有用。只能假设您的文件夹路径未正确解析。或者脚本无法读取文件夹。 如果我们尝试显示带有计时器功能的图像会更好。 【参考方案1】:

您也可以为此使用glob

$dirname = "media/images/iconized/";
$images = glob($dirname."*.png");

foreach($images as $image) 
    echo '<img src="'.$image.'" /><br />';

【讨论】:

多个图像扩展怎么样,而不是只有 png,我也想考虑 JPEG 或 gif 或我想要的。 你可以这样写 glob("$dirname*.png, $dirname*.jpeg, $dirname*..gif") @MightyLucene 您在评论中的建议不起作用。一种方法是这样的:$images = glob($dirname."*.jpg,gif,png",GLOB_BRACE); From glob manual : GLOB_BRACE - 扩展 a,b,c 以匹配 'a'、'b' 或 'c' 多个扩展是这样的:$images = glob($dirname."*.[JjPp][PpNn][Gg]"); 所以只需用可能的组合来填充每个字符,以便快速而顺利地实现 我建议对图像添加限制:echo "&lt;img src='$image' style='max-width:100px; max-height:100px;' /&gt; ";【参考方案2】:

您可以使用简单的 php 脚本显示文件夹中的所有图像。假设文件夹名称为“images”并在此文件夹中放置一些图像,然后使用任何文本编辑器并粘贴此代码并运行此脚本。 这是php代码

    <?php
     $files = glob("images/*.*");
     for ($i=0; $i<count($files); $i++)
      
        $image = $files[$i];
        $supported_file = array(
                'gif',
                'jpg',
                'jpeg',
                'png'
         );

         $ext = strtolower(pathinfo($image, PATHINFO_EXTENSION));
         if (in_array($ext, $supported_file)) 
            echo basename($image)."<br />"; // show only image name if you want to show full path then use this code // echo $image."<br />";
             echo '<img src="'.$image .'"  />'."<br /><br />";
             else 
                continue;
            
          
       ?>

如果您不检查图像类型,请使用此代码

<?php
$files = glob("images/*.*");
for ($i = 0; $i < count($files); $i++) 
    $image = $files[$i];
    echo basename($image) . "<br />"; // show only image name if you want to show full path then use this code // echo $image."<br />";
    echo '<img src="' . $image . '"  />' . "<br /><br />";


?>

【讨论】:

我相信这段代码假定 images 文件夹中的每个文件实际上都是一个图像。如果一个文本文件是错误的,那么它也会被显示出来。 为什么在 for 循环中从 1 开始?那么第一个文件不是被遗忘了吗? 我只是使用循环,所以我可以从 0 或 1 开始,我还使用 count(array),所以循环继续文件夹中的所有图像 所有文件,而不是所有图像。如果您打算这样说,那么所有扩展都被接受。包括.pdf、.txt等【参考方案3】:

您需要将循环从for ($i=1; $i&lt;count($files); $i++) 更改为for ($i=0; $i&lt;count($files); $i++)

所以正确的代码是

<?php
$files = glob("images/*.*");

for ($i=0; $i<count($files); $i++) 
    $image = $files[$i];
    print $image ."<br />";
    echo '<img src="'.$image .'"  />'."<br /><br />";


?>

【讨论】:

【参考方案4】:

如果有人正在寻找递归。

<?php

echo scanDirectoryImages("images");

/**
 * Recursively search through directory for images and display them
 * 
 * @param  array  $exts
 * @param  string $directory
 * @return string
 */
function scanDirectoryImages($directory, array $exts = array('jpeg', 'jpg', 'gif', 'png'))

    if (substr($directory, -1) == '/') 
        $directory = substr($directory, 0, -1);
    
    $html = '';
    if (
        is_readable($directory)
        && (file_exists($directory) || is_dir($directory))
    ) 
        $directoryList = opendir($directory);
        while($file = readdir($directoryList)) 
            if ($file != '.' && $file != '..') 
                $path = $directory . '/' . $file;
                if (is_readable($path)) 
                    if (is_dir($path)) 
                        return scanDirectoryImages($path, $exts);
                    
                    if (
                        is_file($path)
                        && in_array(end(explode('.', end(explode('/', $path)))), $exts)
                    ) 
                        $html .= '<a href="' . $path . '"><img src="' . $path
                            . '" style="max-height:100px;max-width:100px" /></a>';
                    
                
            
        
        closedir($directoryList);
    
    return $html;

【讨论】:

严格标准:只有变量应该通过引用传递。该: && in_array(end(explode('.', end(explode('/', $path)))), $exts) 部分。【参考方案5】:

试试 SPL DirectoryIterator

<?
foreach ((new DirectoryIterator("mydir/")) as $fileinfo) 
   // Ignore .files (.htaccess, .DS_Store, etc)
   if (!$fileinfo->isDot()) 
      // Check if file is a PNG
      if ($fileinfo->getExtension() == 'png') 
         echo "This is a PNG image.";
      
   

【讨论】:

【参考方案6】:

严格标准:只有变量应该在 /home/aadarshi/public_html/----------/upload/view.php 第 32 行通过引用传递

代码是:

<?php

echo scanDirectoryImages("uploads");

/**
* Recursively search through directory for images and display them
* 
* @param  array  $exts
* @param  string $directory
* @return string
*/
function scanDirectoryImages($directory, array $exts = array('jpeg', 'jpg', 'gif', 'png'))

if (substr($directory, -1) == '/') 
    $directory = substr($directory, 0, -1);

$html = '';
if (
    is_readable($directory)
    && (file_exists($directory) || is_dir($directory))
) 
    $directoryList = opendir($directory);
    while($file = readdir($directoryList)) 
        if ($file != '.' && $file != '..') 
            $path = $directory . '/' . $file;
            if (is_readable($path)) 
                if (is_dir($path)) 
                    return scanDirectoryImages($path, $exts);
                
                if (
                    is_file($path)
                    && in_array(end(explode('.', end(explode('/', $path)))),   $exts)
                ) 
                    $html .= '<a href="' . $path . '"><img src="' . $path
                        . '" style="max-height:100px;max-width:100px" />  </a>';
                
            
        
    
    closedir($directoryList);

return $html;

【讨论】:

您应该为您的答案添加更多解释,否则它可能会被删除。请同时修正你的格式。 您能否解释一下您在代码中所做的更改,以免出错? 代码没有修复任何东西,同样的错误信息产生“只有变量应该通过引用传递”

以上是关于从指定目录拉取所有图像,然后显示它们的主要内容,如果未能解决你的问题,请参考以下文章

如何从github上拉取项目中的指定目录

jQuery 从目录中拉取图片

MFC从用户指定的目录下查找所有后缀为"txt"的文件

如何从SVN上拉取指定版本间的文件

docker怎么修改拉取源从指定的国内仓库拉取镜像

docker怎么修改拉取源从指定的国内仓库拉取镜像