
21.06.2020, 21:41
|
Кандидат Javascript-наук
|
|
Регистрация: 21.06.2020
Сообщений: 117
|
|
Как быстро объединить много png картинок в один jpg файл?
Привет всем. Пытаюсь реализовать такую штуку уже 2 день, но чтот не выходит. Подскажите как решить эту задачу.
Есть 2 папки с картинками. Папка "Правые" и папка "Левые".
В этих папках лежат по 100 штук png картинок с прозрачным фоном. Итого в 2-х папках 200 png картинок.
В папке "Правые" - лежат картинки которые должны стоять справа
В папке "Левые" - лежат картинки которые должны стоять слева
Нужно объединить все эти картинки, чтоб каждая картинка из папки "Правые" использовала по 1 разу все картинки из папки "Левые" и далее, чтоб каждая картинка из папки "Левые" использовала по 1 разу все картинки из папки "Правые"
В каждой папке лежат те картинки, которые должны стоять в итоговом (склееном) изображении с определенной стороны - слева и справа.
Итого должно получиться 100х100=10000 картинок.
Как это сделать скриптом? Встроенная в фотошоп пакетная обработка вроде для этого не подходит.
|
|

22.06.2020, 06:54
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,609
|
|
Берешь 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))
|
|

22.06.2020, 18:30
|
Кандидат Javascript-наук
|
|
Регистрация: 21.06.2020
Сообщений: 117
|
|
на линукс не стал ставить. поставил на винду.
Запустил от имени админа 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))
Последний раз редактировалось mik888em, 22.06.2020 в 18:53.
|
|

22.06.2020, 22:15
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,609
|
|
Пробелы в путях, надо кавычки добавить:
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"))
|
|

22.06.2020, 23:55
|
Кандидат Javascript-наук
|
|
Регистрация: 21.06.2020
Сообщений: 117
|
|
Пробелы в названиях файлов убрал, кавычки добавил в код. запустил код.
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
Последний раз редактировалось mik888em, 23.06.2020 в 01:25.
|
|

23.06.2020, 01:25
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,609
|
|
Так папки то F:\L+R\ нет.
|
|

23.06.2020, 02:36
|
Кандидат Javascript-наук
|
|
Регистрация: 21.06.2020
Сообщений: 117
|
|
сейчас создал папку и всё заработало, но есть проблема.
У каждой PNG-ки, с каждой стороны есть прозрачный фон, но когда ImageMagick склеивает две Png-ки, то он заливает прозрачный фон - белым цветом и вот что получается, см скриншот, там видны 2 исходные png и финальная (склееная) jpg с белой серединой, которой не должно там быть : https://prnt.sc/t4meay
|
|

23.06.2020, 09:32
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,301
|
|
jpg не поддерживает прозрачность.
__________________
29375, 35
|
|

23.06.2020, 10:13
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,609
|
|
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) - белый прозрачный.
Последний раз редактировалось Rise, 23.06.2020 в 10:18.
|
|

23.06.2020, 12:02
|
Кандидат Javascript-наук
|
|
Регистрация: 21.06.2020
Сообщений: 117
|
|
Спасибо огромное! все заработало как надо!
вот финальный код который я использую. может кому-то будет полезно.
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"))
|
|
|
|