php запускает функцию для всех изображений из одного каталога в рекурсивном режиме


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

 $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, чтобы мы тоже могли использовать оболочку

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

Author: Gordon, 2010-04-23

4 answers

<?php

foreach (glob("*.png") as $filename) {
    create_watermark($filename, '/watermarked_dir/' . $filename);
}
 3
Author: DuoSRX, 2010-04-23 13:08:16

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

<?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);
}
 0
Author: Tom Haigh, 2010-04-23 12:59:45

Я использовал 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 спасибо xxx

Стив

 0
Author: Steve, 2010-04-23 13:27:08

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

// 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, вы можете использовать Глобитератор вместо DirectoryIterator, но для этого потребуется PHP5.3.

См.

 0
Author: Gordon, 2015-05-18 10:23:38