GD脚本无法处理数组中的所有图像

时间:2014-06-17 22:58:05

标签: php image-processing gd

我一直在用PHP构建一个画廊作为学习练习,也因为我需要一个人在几个月内展示我的婚礼照片。

我编写了一个处理图像的函数。它会查看原始文件夹中的图像,并为每个图像生成缩略图和预览。到目前为止,它一直很好用,因为我一直在测试小批量的图像。

现在我在原始文件夹中有24个图像,它只处理前18个。我没有显示任何错误,它似乎停止了。

功能

function processImgs($previewWidth, $thumbWidth, $thumbPath, $previewPath, $originalPath) {

    $images = glob($originalPath."*");

    foreach($images as $image){

    $path_parts = pathinfo($image);

    // setup filenames
    $thumbFile = $thumbPath . "thumb_" . $path_parts['filename'] . ".jpg";
    $previewFile = $previewPath . "preview_" . $path_parts['filename'] . ".jpg";

    // calculate new images sizes
    $size = getimagesize($image);
    $originalWidth = $size['0'];
    $originalHeight = $size['1'];
    $previewHeight = $originalHeight / ($originalWidth / $previewWidth);
    $thumbHeight = $originalHeight / ($originalWidth / $thumbWidth);

    //create new images
    $original = imagecreatefromjpeg($image);
    $preview = imagecreatetruecolor($previewWidth, $previewHeight);
    $thumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
    imagecopyresampled($preview, $original, 0, 0, 0, 0, $previewWidth, $previewHeight, $originalWidth, $originalHeight);
    imagecopyresampled($thumb, $original, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $originalWidth, $originalHeight);

    // save images to their new folders
        imagejpeg($preview, $previewFile);
        imagejpeg($thumb, $thumbFile);
        imagedestroy($original);
        imagedestroy($preview);
        imagedestroy($thumb);

    // give some feedback when the script runs
      if (file_exists($thumbFile) && file_exists($previewFile)) {
        echo ". " . $path_parts['filename'] . " processed successfully.<br>";
      } else {
        echo ". " . $path_parts['filename'] . " <strong>failed.</strong><br>";
      }
    }
}

我像这样调用函数

processImgs(1200, 400, "thumb/", "preview/", "original/");

我不知道为什么它不适用于更多文件。我可以打一个时间限制吗?确实需要一段时间。我目前正在MAMP上进行本地构建。


更新

迈克是对的,功能超时了。他的解决方案更合适。

我现在已经创建了一个脚本,可以完成他的建议并解决了这个问题。谢谢您的帮助。我已经添加了下面的脚本,以防其他人使用它。

$newWidth = 400;

if (isset($_GET['img']))     {

    $img = $_GET['img'];
    $filename = $img . ".jpg";

    if (file_exists($filename)) {

        $fp = fopen($filename, 'rb');
        header("Content-Type: image/jpeg");
        header("Content-Length: " . filesize($filename));
        fpassthru($fp);
        exit;

    } else {

        $originalFile = "../original/" . $filename;
        $original = imagecreatefromjpeg($originalFile);
        $size = getimagesize($originalFile);
        $newHeight = $size['1'] / ( $size['0'] / $newWidth);
        $new = imagecreatetruecolor($newWidth, $newHeight);
        imagecopyresampled($new, $original, 0, 0, 0, 0, $newWidth, $newHeight, $size['0'], $size['1']);
        imagejpeg($new, $filename);
        imagedestroy($original);
        imagedestroy($new);

        $fp = fopen($filename, 'rb');
        header("Content-Type: image/jpeg");
        header("Content-Length: " . filesize($filename));
        fpassthru($fp);
    }

}

0 个答案:

没有答案