PHP 试图了解如何从目录生成缩略图

PHP trying to understand how to generate thumbnail from directory

这是我目前拥有的。当我将它包含在我的 index.php 中,然后在页面加载时调用该函数时,我得到一个空白页面。所以这里有问题,但我不知道是什么。我觉得我真的很接近。我只想在目录中创建图像的缩略图,然后将它们显示在 HTML 中作为图像列表,您可以单击该图像以触发灯箱。

我在 PHP 中仍然非常不稳定。我正在尝试在目录中编辑图像。

<?php
function buildThumbGallery(){

    $h = opendir('/Recent_Additions/'); //Open the current directory
    while (false !== ($curDir = readdir($h))) {
        if (!file_exists('/Recent_Additions/thumbs/')) {
            $thumbDir = mkdir('/Recent_Additions/thumbs/', 0777, true);
        }else{
            $thumbDir = '/Recent_Additions/thumbs/';
        }
        $width = 200;
        $height = 200;
        foreach ($curDir as $image) {
            $filePath = $curDir."/".$image;
            $genThumbImg = $image->scaleImage($width, $height, true);
            $newThumb = imagejpeg($genThumbImg, $thumbDir, 100);

            echo '<li> <a class="fancybox" data-fancybox-group="'.basename($curDir).'" href="'.$filePath.'" title="'.basename($curDir)." ".strpbrk(basename($filePath, ".jpg"), '-').'"><img src="'.$newThumb.'"/>'.basename($curDir).'</a>';
            imagedestroy($newThumb);
        }echo '</li>';
}
?>

你做错了几件事:

  • 您没有关闭 while 循环。
  • Readdir 已经在一个目录中循环,你的 foreach 没有做任何事情。
  • 您的 echo 中缺少引号。
  • 您正在对字符串调用方法 scaleImage,我想您是想调用函数 imagescale.

您遗漏和误解了很多东西,请在此处查看如何创建缩略图: 另请查看您是否可以启用 PHP 错误,当您的代码充满错误时得到一个空白页面并没有真正的帮助,是吗?

::编辑::

在@swordbeta 的帮助下,我的脚本可以正常运行。下面是代码供以后参考:

<?php
function buildThumbGallery(){

    $curDir = "./Recent_Additions/";
    $thumbsPath = $curDir."thumbs/";

    if (!file_exists($thumbsPath)) {
        mkdir($thumbsPath, 0777, true);
    }
    foreach(scandir($curDir) as $image){
        if ($image === '.' || $image === '..' || $image === 'thumbs') continue;
        if(!file_exists($thumbsPath.basename($image, ".jpg")."_thumb.jpg")){
            // Max vert or horiz resolution
            $maxsize=200;

            // create new Imagick object
            $thumb = new Imagick($curDir.$image);  //'input_image_filename_and_location'

            $thumb->setImageFormat('jpg'); 

            // Resizes to whichever is larger, width or height
            if($thumb->getImageHeight() <= $thumb->getImageWidth()){
            // Resize image using the lanczos resampling algorithm based on width
                $thumb->resizeImage($maxsize,0,Imagick::FILTER_LANCZOS,1);
            }else{
                // Resize image using the lanczos resampling algorithm based on height
                $thumb->resizeImage(0,$maxsize,Imagick::FILTER_LANCZOS,1);
            }

            // Set to use jpeg compression
            $thumb->setImageCompression(Imagick::COMPRESSION_JPEG);
            $thumb->setImageCompressionQuality(100);
            // Strip out unneeded meta data
            $thumb->stripImage();
            // Writes resultant image to output directory
            $thumb->writeImage($thumbsPath.basename($image, ".jpg")."_thumb.jpg");  //'output_image_filename_and_location'
            // Destroys Imagick object, freeing allocated resources in the process
            $thumb->destroy();
        }else{
            echo '<a class="fancybox" data-fancybox-group="'.basename($curDir).'" href="'.$curDir.basename($image, "_thumb.jpg").'" title="Recent Addition - '.basename($image, ".jpg").'"><img src="'.$thumbsPath.basename($image, ".jpg")."_thumb.jpg".'"/></a>';
            echo '<figcaption>'.basename($image, ".jpg").'</figcaption>' . "<br/>";   
        }
    } 
}
?>

::原版Post::

好的,在返回并从@swordbeta 那里做了一些更多的研究和建议之后,我得到了一些有用的东西。我现在唯一的问题是我无法在 index.php 中显示图像。稍后我将在 CSS 中设置输出样式,现在我只想查看缩略图,然后将它们构建到灯箱 href 链接中:

<?php
function buildThumbGallery(){

    $curDir = "./Recent_Additions/";
    $thumbsPath = $curDir."/thumbs/";

    if (!file_exists($thumbsPath)) {
        mkdir($thumbsPath, 0777, true);
    }

    $width = 200;

    foreach(scandir($curDir) as $image){
        if ($image === '.' || $image === '..') continue;
        if(file_exists($thumbsPath.basename($image)."_thumb.jpg")){
            continue;
        }else{
            // Max vert or horiz resolution
            $maxsize=200;

            // create new Imagick object
            $thumb = new Imagick($curDir.$image);  //'input_image_filename_and_location'

            // Resizes to whichever is larger, width or height
            if($thumb->getImageHeight() <= $thumb->getImageWidth()){
            // Resize image using the lanczos resampling algorithm based on width
                $thumb->resizeImage($maxsize,0,Imagick::FILTER_LANCZOS,1);
            }else{
                // Resize image using the lanczos resampling algorithm based on height
                $thumb->resizeImage(0,$maxsize,Imagick::FILTER_LANCZOS,1);
            }

            // Set to use jpeg compression
            $thumb->setImageCompression(Imagick::COMPRESSION_JPEG);
            $thumb->setImageCompressionQuality(100);
            // Strip out unneeded meta data
            $thumb->stripImage();
            // Writes resultant image to output directory
            $thumb->writeImage($thumbsPath.basename($image)."_thumb.jpg");  //'output_image_filename_and_location'
            // Destroys Imagick object, freeing allocated resources in the process
            $thumb->destroy();
        }
    }   echo '<img src="'.$thumbsPath.basename($image)."_thumb.jpg".'" />' . "<br/>";
}
?>

目前,echo 的输出没有显示任何内容,但脚本的其余部分工作正常(即在 thumbs 目录中生成缩略图)。

我猜我没有正确格式化我的 echo。这个脚本在我的 index.php 中被称为 <?php buildThumbGallery(); ?> 在样式化的 <div> 标签中。