Функция запуска PHP на всех изображениях из одного каталога в рекурсивном режиме - PullRequest
2 голосов
/ 23 апреля 2010

У меня есть функция

 $result = create_watermark( 'input_file_name' ,'output_file_name');

У меня есть каталог с именем /images с 500 изображениями в нем.Все файлы имеют имя images_(some_unknown_numbers).png (все png).Теперь я хочу запустить их через функцию в цикле и вывести /markedimage/images_1.png, images_2.png, images_3.png и так далее.

Я хочу запустить этот скрипт в Ubuntu, чтобы мы тоже могли использовать оболочку

Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 23 апреля 2010
<?php

foreach (glob("*.png") as $filename) {
    create_watermark($filename, '/watermarked_dir/' . $filename);
}
0 голосов
/ 23 апреля 2010

я использовал 2-й ответ

рабочий один

<?php

foreach (glob("*.png") as $filename) {
    create_watermark($filename, '/watermarked_dir/' . $filename);
}
?>

этот ответ работал без каких-либо изменений: D спасибо, но я не могу проголосовать за него, потому что я не зарегистрирован

@ 1, мне не удалось заставить его работать, но это, я думаю, если приложить некоторые усилия, это должно сработать

<?php
$dir = './sourceDir';
$outputDir = './markedimage';

//get files matching pattern. maybe you could use glob() instead
$files = scandir($dir);
$files = preg_grep('~^images_\d+.png$~i', $files);

//process each file
foreach ($files as $file) {
     create_watermark( $dir . '/' . $file, $outputDir . '/' . $file);
}

?>

спасибо парню, который пытался помочь мне, я пытался сделать это за последние 5 часовно подвела ее, она решилась за пять минут

: D thankxxx

Стив

0 голосов
/ 23 апреля 2010

Не проверено, но это также должно работать:

// Iterate over all filesystem objects in /images
foreach( new DirectoryIterator('/images') as $file ) {
    // check if item is a readable file
    if( $file->isFile() && $file->isReadable() ) {
        // give debug message so we know what the script is doing
        echo "Watermarking $file \n";
        // call your function
        create_watermark(
            // argument 1 is the full path to the image
            $file->getPathname(),
            // argument 2 is the destination folder plus the filename w/out path
            '/markedimage/' . $file->getFilename()
        );
    // tell us if it is not a readable file
    } else {
        echo "Skipped $file \n";
    }
}

Если в папке есть файлы, которые не являются файлами png, вы можете использовать GlobIterator вместо DirectoryIterator, нодля этого потребуется PHP5.3.

См.

0 голосов
/ 23 апреля 2010

Я не уверен, хотите ли вы переиндексировать числа для выходных файлов.Этот пример должен сохранить их:

<?php
$dir = './sourceDir';
$outputDir = './markedimage';

//get files matching pattern. maybe you could use glob() instead
$files = scandir($dir);
$files = preg_grep('~^images_\d+.png$~i', $files);

//process each file
foreach ($files as $file) {
     create_watermark( $dir . '/' . $file, $outputDir . '/' . $file);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...