1

画像ディレクトリをスキャンし、サムネイルを別のディレクトリに作成するスクリプトを作成しています。

function createThumbs( $pathToImages, $pathToThumbs, $thumbWidth ) 
{
// Turn off all error reporting
error_reporting(0);

set_time_limit(0);
  // open the directory
  $dir = opendir( $pathToImages );

  // loop through it, looking for any/all JPG files:
  $i='1';
  while (false !== ($fname = readdir( $dir ))) {
    // parse path for the extension
    $info = pathinfo($pathToImages . $fname);
    // continue only if this is a JPEG image
        $source_file_name = basename($source_image);
        $source_image_type = substr($source_file_name, -3, 3);

        switch(strtolower($info['extension']))
        {
        case 'jpg':
            $img = imagecreatefromjpeg("{$pathToImages}{$fname}");
            break;

        case 'gif':
            $img = imagecreatefromgif("{$pathToImages}{$fname}");
            break;

        case 'png':
            $img = imagecreatefrompng("{$pathToImages}{$fname}");
            break;    
        }

      echo "$i : Creating thumbnail for small_$fname <br />";

      // load image and get image size
      $width = imagesx( $img );
      $height = imagesy( $img );

    // this will be our cropped image

    // copy the crop area from the source image to the blank image created above

    // calculate thumbnail size
      $new_width = $thumbWidth;
      $new_height = $thumbWidth;

      // create a new tempopary image
      $tmp_img = imagecreatetruecolor( $new_width, $new_height );


      // copy and resize old image into new image 
      imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );


    switch(strtolower($info['extension']))
    {
        case 'jpg':
            imagejpeg($tmp_img, "{$pathToThumbs}small_$fname", 100);
            break;

        case 'gif':
            imagegif($tmp_img, "{$pathToThumbs}small_$fname");
            break;

        case 'png':
            imagepng($tmp_img,"{$pathToThumbs}small_$fname", 0);
            break;    
    }
    imagedestroy($img);
    imagedestroy($tmp_img);
    $i++;
      }
  // close the directory
  closedir( $dir );
}

そして、これらの関数を次のように呼び出します

createThumbs("media/normal/","media/small/",70);

スクリプトはうまく機能しますが、問題は、約 4000 枚の画像があり、スクリプトが約 2400 ~ 2600 枚の画像でサムネイルの作成を停止したことです。

このリンクで試すことができますhttp://saharandev.co.uk/saharan/create_thumbs_small.php

誰でも助けてくれますか?

ありがとう

4

2 に答える 2

0

これは古いトピックであることは知っていますが、これに私の経験を追加すると思いました。ブラウザ経由でスクリプトを実行している場合、タイムアウトが問題になります。考えてみると、サーバーの設定を変更せずに最も簡単な解決策を見つけました。それは AJAX を使用することです。

したがって、jQuery AJAX を使用すると、jQuery で PHP スクリプトをトリガーして一度に 1 枚の写真を処理し、ステータスを報告することができます。JavaScriptで「リスト」などを更新することができるので、すべての写真の処理中の場所を確認できます。jQuery は次のファイルを処理するコマンドを送信します > PHP はファイルを処理し、レポートを返します > jQuery は応答を処理し、プロセスを繰り返します。

これの最大の欠点は、すべてのファイルが完成するまでブラウザを開いたままにしなければならないことです。コマンドプロンプトからスクリプトを実行することで簡単に制限を克服できますが、私の経験からすると、それは少し複雑です。

とにかく、特にサーバー設定にアクセスしたり変更したりできない場合に、他の人が多くの写真を繰り返し処理して制限を克服する方法を解決するのに役立つことを願っています.

于 2016-09-16T21:22:29.883 に答える