Изменение размеров сотен JPG с использованием node и gm
У меня есть папка с изображениями, содержащая около 100 подпапок, и в каждой есть около 5 JPG.
Я пытаюсь использовать узел, чтобы перебрать все изображения и изменить их размер таким образом, чтобы наименьшее измерение было 1200. Они представляют собой смесь портрета и пейзажа, а наименьшее измерение (w или h) должно быть 1200, масштабируя другое измерение, чтобы сохранить соотношение сторон.
Я изучаю нод, поэтому не слишком хорошо знаю платформу, но довольно уверенно отношусь к JS UI.
Я нашел модуль npm walker, модуль npm gm, который работает для одного JPG, так что подумал и подумал, что это будет довольно легко, но у меня проблема с циклом 500+ изображений, тогда код gm() решает, что делать. после того, как цикл закончился, но все выходит из строя.
Вот мой код...
https://runkit.com/nmiddleweek/58d40b478c992a00146502ba
(Должен ли я встроить код?)
Вот ошибка консоли...
Это бросается после приблизительно 450 итераций...
processing... /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Salads/italian-bruchetta-3500px-1.jpg
Finished... /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Salads/italian-bruchetta-3500px-1.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Salads/italian-caprese-3500px-1.jpg
processing... /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Salads/italian-caprese-3500px-1.jpg
/Users/nick.middleweek/dev/github/exp-ex225-Carousel-with-images/node_modules/gm/lib/command.js:228
proc.stdin.once('error', cb);
^
TypeError: Cannot read property 'once' of undefined
at gm._spawn (/Users/nick.middleweek/dev/github/exp-ex225-Carousel-with-images/node_modules/gm/lib/command.js:228:15)
at gm._exec (/Users/nick.middleweek/dev/github/exp-ex225-Carousel-with-images/node_modules/gm/lib/command.js:190:17)
at gm.proto.(anonymous function) [as size] (/Users/nick.middleweek/dev/github/exp-ex225-Carousel-with-images/node_modules/gm/lib/getters.js:68:12)
at resizeFile (/Users/nick.middleweek/dev/github/exp-ex225-Carousel-with-images/scripts/imageResizer.js:17:22)
at Walker.<anonymous> (/Users/nick.middleweek/dev/github/exp-ex225-Carousel-with-images/scripts/imageResizer.js:67:21)
at emitTwo (events.js:106:13)
at Walker.emit (events.js:191:7)
at /Users/nick.middleweek/dev/github/exp-ex225-Carousel-with-images/node_modules/walker/lib/walker.js:98:12
at FSReqWrap.oncomplete (fs.js:117:15)
JEG-UPD-PRT0018:scripts nick.middleweek$
Раскомментированная строка 66...
Если я раскомментирую строку 66 и принудительно уменьшу количество обрабатываемых файлов до 20, я получу другой вывод, и модуль gm вызывается с другими console.logs. Увидеть ниже...
.
.
.
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Hungarian/istock-537623284.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Hungarian/istock-537729484.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Ice Cream/istock-184348412.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Ice Cream/istock-493159114.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Ice Cream/istock-513809654.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Ice Cream/istock-519681814.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Ice Cream/istock-609908738.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/Ice Cream/istock-625144420.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/_just-eat/istock-496311554.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/_just-eat/istock-457422997.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/_just-eat/italian-bruchetta-3500px-1.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/_just-eat/italian-caprese-3500px-1.jpg
Current file: /Users/nick.middleweek/Google Drive/Exp-CDN (For Upload)/UK/exp/EX-225/images/_just-eat/shutterstock_504548443.jpg
... is wider
... is wider
... is wider
... is wider
... is wider
... is wider
... is wider
... is wider
... is wider
done
done
done
done
done
done
done
done
done
JEG-UPD-PRT0018:scripts nick.middleweek$
Итак, здесь выполняется модуль gm, и я могу проверить, что некоторые JPG на диске были изменены, а соотношение сторон сохранено - потрясающе!
Что странно, так это порядок, в котором в логах выходят... Почему Node выполняет код в пакетах, как это?
Это проблема синхронизации / асинхронности? И как я могу изменить это на...
а). Позвольте мне обработать сотни изображений б). Обработайте изображения, чтобы хотя бы решить эту проблему, чтобы она работала правильно:-)
Заранее спасибо за любую помощь и идеи.
Ура, Ник