Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как быстро объединить много png картинок в один jpg файл? (https://javascript.ru/forum/events/80566-kak-bystro-obedinit-mnogo-png-kartinok-v-odin-jpg-fajjl.html)

mik888em 21.06.2020 20:41

Как быстро объединить много png картинок в один jpg файл?
 
Привет всем. Пытаюсь реализовать такую штуку уже 2 день, но чтот не выходит. Подскажите как решить эту задачу.

Есть 2 папки с картинками. Папка "Правые" и папка "Левые".

В этих папках лежат по 100 штук png картинок с прозрачным фоном. Итого в 2-х папках 200 png картинок.

В папке "Правые" - лежат картинки которые должны стоять справа

В папке "Левые" - лежат картинки которые должны стоять слева

Нужно объединить все эти картинки, чтоб каждая картинка из папки "Правые" использовала по 1 разу все картинки из папки "Левые" и далее, чтоб каждая картинка из папки "Левые" использовала по 1 разу все картинки из папки "Правые"

В каждой папке лежат те картинки, которые должны стоять в итоговом (склееном) изображении с определенной стороны - слева и справа.

Итого должно получиться 100х100=10000 картинок.

Как это сделать скриптом? Встроенная в фотошоп пакетная обработка вроде для этого не подходит.

Rise 22.06.2020 05:54

Берешь ImageMagick. Командная строка:
FOR %I IN (D:\IMG\L\*.png) DO (FOR %J IN (D:\IMG\R\*.png) DO (magick %I %J -background white -alpha remove +append -quality 92 D:\IMG\L+R\%~nI+%~nJ.jpg))

mik888em 22.06.2020 17:30

на линукс не стал ставить. поставил на винду.
Запустил от имени админа cmd и вбил код. Все директории указал верно, всё лежит на своих местах! Все название png-шек на латинце.

имейджмеджик вот что выдаёт и так бежит бесконечно. Может какие-то дополнительные библиотеки нужно установить?

https://prnt.sc/t4dw7q

Вот какой код я запускал:
FOR %I IN (F:\L\*.png) DO (FOR %J IN (F:\R\*.png) DO (magick %I %J -background white -alpha remove +append -quality 75 F:\L+R\%~nI+%~nJ.jpg))

Rise 22.06.2020 21:15

Пробелы в путях, надо кавычки добавить:
FOR %I IN ("D:\IMG\L\*.png") DO (FOR %J IN ("D:\IMG\R\*.png") DO (magick "%I" "%J" -background white -alpha remove +append -quality 92 "D:\IMG\L+R\%~nI+%~nJ.jpg"))

mik888em 22.06.2020 22:55

Пробелы в названиях файлов убрал, кавычки добавил в код. запустил код.

FOR %I IN ("F:\L\*.png") DO (FOR %J IN ("F:\R\*.png") DO (magick "%I" "%J" -background white -alpha remove +append -quality 75 "F:\L+R\%~nI+%~nJ.jpg"))



Imagemagick видит png файлы но пишет:

C:\Program Files\ImageMagick>(magick "F:\L\49.png" "F:\R\33.png" -background white -alpha remove +append -quality 75 "F:\L+R\49+33.jpg" )
magick: unable to open image 'F:\L+R\49+33.jpg': No such file or directory @ error/blob.c/OpenBlob/3539.


Скриншот работы: https://prnt.sc/t4lgyy

Rise 23.06.2020 00:25

Так папки то F:\L+R\ нет.

mik888em 23.06.2020 01:36

сейчас создал папку и всё заработало, но есть проблема.

У каждой PNG-ки, с каждой стороны есть прозрачный фон, но когда ImageMagick склеивает две Png-ки, то он заливает прозрачный фон - белым цветом и вот что получается, см скриншот, там видны 2 исходные png и финальная (склееная) jpg с белой серединой, которой не должно там быть : https://prnt.sc/t4meay

Aetae 23.06.2020 08:32

jpg не поддерживает прозрачность.

Rise 23.06.2020 09:13

mik888em,
FOR %I IN ("D:\IMG\L\*.png") DO (FOR %J IN ("D:\IMG\R\*.png") DO (magick "%I" "%J" -background "rgba(255,255,255,0)" -alpha remove -bordercolor "rgba(255,255,255,0)" -border 1 -trim +append -quality 92 "D:\IMG\L+R\%~nI+%~nJ.jpg"))

Прозрачный тоже представляет какой-то цвет, а не то что его там нет. Например, это rgba(255,255,255,0) - белый прозрачный.

mik888em 23.06.2020 11:02

Спасибо огромное! все заработало как надо!
вот финальный код который я использую. может кому-то будет полезно.

FOR %I IN ("F:\L\*.png") DO (FOR %J IN ("F:\R\*.png") DO (magick "%I" "%J" -background "rgba(255,255,255,0)" -alpha remove -bordercolor "rgba(255,255,255,0)" -border 1 -trim +append -quality 70 "F:\L+R\%~nI+%~nJ.jpg"))


Часовой пояс GMT +3, время: 15:07.