Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 24.03.2015
Сообщений: 29

Node.js, модуль imagemagick и пакетная обработка

11.06.2019, 20:38. Показов 2926. Ответов 8

Студворк — интернет-сервис помощи студентам
Всем привет! Такая ситуация: нужно обработать фотки определённым образом, а именно:

В директории лежат 100 фотографий в формате jpg
Нода должна взять первую, сжать её до xxx пикселей по ширине, сохранить как name-xxx.jpg, дальше сконвертировать её в webp и сохранить как name-xxx.webp
Дальше с этой же фотографией нода должна сжать до yyy пикселей по ширине и проделать тоже самое сохранение и конвертацию
Потом с этой же фотографией сжимаем до zzz пикселей и тоже аналогично сохраняем и конвертируем.

А потом следующую фотку также.

Вообще реально, как думаете? сайт https://www.imagemagick.org/ не открывается и где чего почитать - я не нашёл...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2019, 20:38
Ответы с готовыми решениями:

Пакетная обработка
Ребят задумка такая....открываю файл docx, запускаю макрос. Он копирует в буфер картинки с листа, затем запускает...

Пакетная обработка
Привет всем ! У меня созрел вопрос следующего характера: во время пакетной обработки в Fhotoshop, ну допустим изменения размера, во время...

Пакетная обработка треков
Всем привет. Нужно ПО, которое будет накладывать нужный мне звуковой файл на MP3 файлы. Допустим: имеется 20 MP3 песен (до 5 минут),...

8
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
11.06.2019, 22:31
ragug, можете попробовать использовать модуль sharp (sharp GitHub): реализация на чистом JS, лично использую у себя на сервере для сжатия фотографий от пользователей.
0
0 / 0 / 0
Регистрация: 24.03.2015
Сообщений: 29
11.06.2019, 22:36  [ТС]
MrOnlineCoder, да, классная штука, не знал о ней до сегодняшнего дня. а как у Вас реализована эта возможность сжатия фото от пользователей? можете поделиться кодом?
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
11.06.2019, 23:09
ragug, сам код с сайта не скину, там много лишнего в контексте этой темы, но там все просто:

1. С помощью пакета multer загружается на сервер файл и генерируется уникальное имя для файла
2. С помощью пакета sharp файл сжимается до размеров, которые используются на стороне клиента:

JavaScript
1
2
3
4
5
6
7
8
 sharp(pathToFile).resize(width, height).toFile(newPathToFile, (err, info) => {
    if (err) {
      //image resizing error
      return;
    }
 
    //file resized
  });
Цитата Сообщение от ragug Посмотреть сообщение
Нода должна взять первую, сжать её до xxx пикселей по ширине, сохранить как name-xxx.jpg, дальше сконвертировать её в webp и сохранить как name-xxx.webp
Дальше с этой же фотографией нода должна сжать до yyy пикселей по ширине и проделать тоже самое сохранение и конвертацию
Потом с этой же фотографией сжимаем до zzz пикселей и тоже аналогично сохраняем и конвертируем.
Мне интересно почему здесь так все запутано - почему картинки сжимаются не за один шаг, а по ширине и высоте по отдельности?
0
0 / 0 / 0
Регистрация: 24.03.2015
Сообщений: 29
11.06.2019, 23:22  [ТС]
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
ragug
Мне интересно почему здесь так все запутано - почему картинки сжимаются не за один шаг, а по ширине и высоте по отдельности?
Я наверное плохо объяснил. Сейчас попробую по другому.

Есть папка с фотками. Например, 1.jpg, 2.jpg, 3.jpg и так далее
Мне надо на выходе получить 1-600px.jpg, 1-400px.jpg, 1-200px.jpg и 2-600px.jpg, 2-400px.jpg, 2-200px.jpg и 3-600px.jpg, 3-400px.jpg, 3-200px.jpg
И плюс тоже самое в webp, то есть 1-600px.webp, 1-400px.webp, 1-200px.webp и 2-600px.webp, 2-400px.jpg, 2-200px.webp и 3-600px.webp, 3-400px.webp, 3-200px.webp

600px, 400px и 200px - это ширина изображения, высота должна пропорционально подогнаться...

Вот, собственно, такая штука мне нужна.
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
11.06.2019, 23:46
Лучший ответ Сообщение было отмечено ragug как решение

Решение

ragug, теперь понял) Вам нужно реализовать несложный алгоритм примерно такого вида:

1. С помощью fs.readdir получить список файлов в каталоге
2. Создать функцию, которая на входе принимает оригинальное название файла, например
JavaScript
1
processFile(file)
3. Эта функция в свою очередь вызывает другую функцию
JavaScript
1
resizeAndSave(file, quality, format)
на каждый нужный размер и формат
4. И наконец, функция resizeAndSave с помощью sharp сохраняет новое изображение, предварительно по пропорции рассчитав нужную высоту.

Добавлено через 50 секунд
P.S. если это связано с загружаемым контентом от пользователей на сайте, то я бы порекомендовал вам генерировать картинки разных форматов уже на этапе загрузки.
1
Software Engineer
 Аватар для Custos
332 / 335 / 55
Регистрация: 23.09.2014
Сообщений: 983
11.06.2019, 23:53
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
реализация на чистом JS
Там не чистый JS
https://github.com/lovell/sharp/tree/master/src
1
0 / 0 / 0
Регистрация: 24.03.2015
Сообщений: 29
12.06.2019, 10:59  [ТС]
MrOnlineCoder, спасибо!
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
12.06.2019, 13:00
Custos, упс, извиняюсь, попутал с другой библиотекой)

Но авторы утверждают что их решение быстрее imagemagick, так что можно испытать все равно)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.06.2019, 13:00
Помогаю со студенческими работами здесь

Кроп и пакетная обработка
Привет форумчане, с прошедшим праздником :) Учусь делать HDR панорамы. Нужно выравнять и кадрировать фотки, снятые с эксповилкой. В...

Пакетная обработка файлов
Нужно переводить большие группы файлов *.txt *.hmtl *.php и т.д. из кодировки ANSI в UTF-8 с сохранением оригинальных файлов (скажем с...

Удалить фон (пакетная обработка)
Добрый день. У меня есть 500-1000 изображений (короче очень много - редактировать каждое конкретное изображение - убиццо ап стенку=))....

Что такое пакетная обработка файлов?
Не до конца понимаю что такое "пакетная обработка файлов". Это вроде просто обработка нескольких файлов сразу... если да, то что значит...

Пакетная обработка изображений с сохранением пропорций
Здравствуйте. Суть такова: есть например 1000 фото с расширением 2000х3000 или 1500х1200 и др., но всем картинкам надо сделать высоту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru