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, чтобы мы тоже могли использовать оболочку
Как я могу это сделать?
4 answers
<?php
foreach (glob("*.png") as $filename) {
create_watermark($filename, '/watermarked_dir/' . $filename);
}
Я не уверен, хотите ли вы переиндексировать номера выходных файлов. Этот пример должен сохранить их:
<?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);
}
Я использовал 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
Стив
Непроверенный, но это тоже должно сработать:
// 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.
См.