Форум программистов, компьютерный форум, киберфорум
Софт: Графические редакторы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
-3 / 2 / 0
Регистрация: 29.10.2013
Сообщений: 170
1
Windows

Пакетная обработка с изменением размера изображения и имени файла

01.03.2021, 17:12. Показов 1696. Ответов 10

Всем доброго времени суток.
Пример.
Есть каталог с подкаталогами, где находятся изображения. (пусть будет D:\222\)
Необходимо у всех изображений, по длинной стороне, превышающее значение в 1024 пикселя, изменить это значение на 1024, пропорционально уменьшив и другую сторону, меньшие пропустить.
Сохранив при этом ВСЕ изображения с новым именем ###.JPG качество 80. (или заменив предыдущие, или удалить оригиналы)
Сейчас делаю это в FastStone Image Viewer.
НО решил оптимизировать указанный процесс, до запуска бат файла.
Пробовал ImBatch (64-bit) но там автоматизировать до БАТ файла только платно. К сожалению, не вариант, так как изображения для сайта сельской школы, а там с оплатой туго.
Наткнулся в сети на nconvert, но не смог разобраться как работает именно с каталогами. Через XnViewMP даже создавал файл конфигурации, но запустить не получилось.
Тут на форуме узнал о GraphicsMagick прочел в сообщении от FlasherX, но пока даже не смотрел что и как.
Прошу совета.
Какой вариант выбрать, так сказать, в каком направлении копать, прям на качество фото налегать нет необходимости так как они порой изначально плохого качества.
А вот на уменьшение размера при сохранении исходного/приемлемого качества очень хотелось бы наедятся так как каждый кб на счету.

Добавлено через 3 часа 21 минуту
Получилось вот так.
Windows Batch file
1
2
@chcp 1251
FOR /f "delims=*" %%A IN ('dir *.jpg /b /s')  do "D:\111\NConvert\nconvert" -ratio -rtype lanczos -resize longest 1024  -o ### -q 80 -opthuff "%%A"
Но вот беда.
1. nconvert складывает все файлы в текущий каталог, а мне необходимо что бы он копировал их в исходный каталог.
2. Что-то я видать напутал и он именует файлы 001.JPG, 001_1.JPG, 001_2.JPG и т.д. А не 001.JPG, 002.JPG, 003.JPG.

Добавлено через 8 минут
Изменил код вот так параметр -o $

Windows Batch file
1
2
@chcp 1251
FOR /f "delims=*" %%A IN ('dir *.jpg /b /s')  do "D:\111\NConvert\nconvert" -ratio -rtype lanczos -resize longest 1024  -o $ -q 80 -opthuff "%%A"
Стал сохранять внутри каталогов. НО вот беда имя первого файла пустое. а потом идет _1.JPG, _2JPG и т.д.

Добавлено через 41 минуту
Изменил код вот так.

Windows Batch file
1
2
@chcp 1251
@for /R D:\333\ %%A in (*.png *.jpg *.jpeg *.gif *.bmp) do "D:\111\NConvert\nconvert" -ratio -o $ -rtype lanczos -resize longest 1024 -q 80 -opthuff "%%A"
Но не могу понять, почему он имена не создает у новых файлов, плохо когда не не понимаешь чего делаешь и делаешь методом тыка и подбора, прям беда какая-то вот почти то что нужно, а до конца доделать не могу.
Ладно утро вечера мудренее может завтра смогу додуматься или может подскажет кто ни будь :-)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2021, 17:12
Ответы с готовыми решениями:

Загрузка изображения с изменением имени, размера…
Привет всем! Мне нужно через форму загрузить фото (картину) на сервер, изменить размер, имя, объем...

VBS Пакетная обработка, с созданием и изменением аттрибутов времени, переименовании
VBS Пакетная обработка jpg, с созданием и изменением аттрибутов времени. Задача обработка jpg...

Работа с изменением размера изображения
Доброго времени суток. Есть анимированный блок с картинками (в виде страниц). При наведении на...

Пакетная обработка в Excel (открытие, обработка, экспорт в .PDF)
Здравствуйте! Хотел бы попросить помочь мне в написании макроса, самому это сделать ума не...

10
3577 / 1918 / 747
Регистрация: 06.06.2017
Сообщений: 6,671
01.03.2021, 19:32 2
Цитата Сообщение от NikolayHAOS Посмотреть сообщение
и делаешь методом тыка и подбора
Так $ не с потолка взято, правда? Логично предположить, что параметром к -o пойдёт $\###. Плюс к этому потребно указывать результирующий тип — -out jpeg.
1
-3 / 2 / 0
Регистрация: 29.10.2013
Сообщений: 170
01.03.2021, 22:42  [ТС] 3
Цитата Сообщение от FlasherX Посмотреть сообщение
$\###
вот о чем я и говорил...
+###
|###
$ ###
Чего я только не пробовал...
Благодарю от всей души, хоть ваш вариант еще не пробовал..
Утром...
0
-3 / 2 / 0
Регистрация: 29.10.2013
Сообщений: 170
02.03.2021, 08:08  [ТС] 4
Сделал.
Один хрен нумерует 001_1, 001_2.
И любопытная особенность, по новой обрабатывает созданные файлы.
Кликните здесь для просмотра всего текста
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
D:\333>2
Текущая кодовая страница: 1251
 
D:\333>"D:\111\NConvert\nconvert" -ratio -o $\### -out jpeg -rtype lanczos -resize longest 1024 -q 80 -opthuff "D:\333\5-eaccf9decf06 — копия (2).png"
** NCONVERT v7.70 (c) 1991-2019 Pierre-E Gougelet (Feb  1 2021/10:46:42) **
        Version for Windows Xp/Vista/7 x64  (All rights reserved)
** This is freeware software (for non-commercial use)
 
Conversion of D:\333\5-eaccf9decf06 — копия (2).png into D:\333\\001.jpg OK
 
D:\333>"D:\111\NConvert\nconvert" -ratio -o $\### -out jpeg -rtype lanczos -resize longest 1024 -q 80 -opthuff "D:\333\5-eaccf9decf06 — копия (3).png"
** NCONVERT v7.70 (c) 1991-2019 Pierre-E Gougelet (Feb  1 2021/10:46:42) **
        Version for Windows Xp/Vista/7 x64  (All rights reserved)
** This is freeware software (for non-commercial use)
 
Conversion of D:\333\5-eaccf9decf06 — копия (3).png into D:\333\\001_1.jpg OK
 
D:\333>"D:\111\NConvert\nconvert" -ratio -o $\### -out jpeg -rtype lanczos -resize longest 1024 -q 80 -opthuff "D:\333\5-eaccf9decf06 — копия.png"
** NCONVERT v7.70 (c) 1991-2019 Pierre-E Gougelet (Feb  1 2021/10:46:42) **
        Version for Windows Xp/Vista/7 x64  (All rights reserved)
** This is freeware software (for non-commercial use)
 
Conversion of D:\333\5-eaccf9decf06 — копия.png into D:\333\\001_2.jpg OK
D:\333>"D:\111\NConvert\nconvert" -ratio -o $\### -out jpeg -rtype lanczos -resize longest 1024 -q 80 -opthuff "D:\333\001.jpg"
** NCONVERT v7.70 (c) 1991-2019 Pierre-E Gougelet (Feb  1 2021/10:46:42) **
        Version for Windows Xp/Vista/7 x64  (All rights reserved)
** This is freeware software (for non-commercial use)
 
Conversion of D:\333\001.jpg into D:\333\\001_4.jpg OK
 
D:\333>"D:\111\NConvert\nconvert" -ratio -o $\### -out jpeg -rtype lanczos -resize longest 1024 -q 80 -opthuff "D:\333\001_1.jpg"
** NCONVERT v7.70 (c) 1991-2019 Pierre-E Gougelet (Feb  1 2021/10:46:42) **
        Version for Windows Xp/Vista/7 x64  (All rights reserved)
** This is freeware software (for non-commercial use)
 
Conversion of D:\333\001_1.jpg into D:\333\\001_5.jpg OK


Добавлено через 22 минуты
Вот как выглядит код.
Windows Batch file
1
2
@chcp 1251
@for /R D:\333\ %%A in (*.png *.jpg *.jpeg *.gif *.bmp) do "D:\111\NConvert\nconvert" -ratio -o $\### -out jpeg -rtype lanczos -resize longest 1024 -q 80 -opthuff "%%A"
0
3577 / 1918 / 747
Регистрация: 06.06.2017
Сообщений: 6,671
02.03.2021, 16:42 5
Лучший ответ Сообщение было отмечено NikolayHAOS как решение

Решение

Цитата Сообщение от NikolayHAOS Посмотреть сообщение
Один хрен нумерует 001_1, 001_2.
В таком случае надо обрабатывать по маске, а не пофайлово.
Windows Batch file
1
@for /f "delims= eol=" %%d in ('dir/ad/b/s D:\333') do @for %%e in (png jpg jpeg gif bmp) do @D:\111\NConvert\nconvert.exe -quiet -ratio -o $\### -out jpeg -rtype lanczos -resize longest 1024 -q 80 -opthuff "%%d\*.%%e"
Хотя, если учесть, что в результат пойдёт один тип, то логично сразу указывать все маски:
Windows Batch file
1
@for /f "delims= eol=" %%d in ('dir/ad/b/s D:\333') do @pushd "%%d"&@D:\111\NConvert\nconvert.exe -quiet -ratio -o $\### -out jpeg -rtype lanczos -resize longest 1024 -q 80 -opthuff *.jpg *.jpeg *.png *.gif *.bmp
1
-3 / 2 / 0
Регистрация: 29.10.2013
Сообщений: 170
02.03.2021, 16:52  [ТС] 6
Добавил параметр -D, для удаления исходников и добавил формат *.jfif.
На данный момент код выглядит так и работает отлично.

Windows Batch file
1
@for /f "delims= eol=" %%d in ('dir/ad/b/s D:\SITE') do @pushd "%%d"&@D:\SOFT\NConvert\nconvert.exe -quiet -ratio -o $\### -out jpeg -rtype lanczos -resize longest 1024 -q 80 -opthuff -D *.jfif *.jpg *.jpeg *.png *.gif *.bmp
Благодарю от всей души.
0
-3 / 2 / 0
Регистрация: 29.10.2013
Сообщений: 170
26.03.2021, 08:52  [ТС] 7
Не понятно почему, но обрабатывает файлы которые меньше по размеру, хотя должен пропускать.
Что не так?
Из файла 384х320 сделал 1024х853.
0
-3 / 2 / 0
Регистрация: 29.10.2013
Сообщений: 170
27.03.2021, 11:33  [ТС] 8
Сам виноват. Недоглядел.
добавил "-rflag decr" все заработало так как надо.

Windows Batch file
1
@for /f "delims= eol=" %%d in ('dir/ad/b/s D:\SITE') do @pushd "%%d"&@D:\SOFT\NConvert\nconvert.exe -quiet -ratio -o $\### -out jpeg -rtype lanczos -rflag decr -resize longest 1024 -q 80 -opthuff -D *.jfif *.jpg *.jpeg *.png *.gif *.bmp
0
-3 / 2 / 0
Регистрация: 29.10.2013
Сообщений: 170
20.05.2021, 10:41  [ТС] 9
Всем доброго времени суток.
Ни как не могу понять как добавить в код параметр что бы к названию файла прибавлялась текущая дата.
Или это вообще не возможно сделать посредством nconvert и нужно повторно пройтись по каталогам чтобы переименовать файлы?
0
3577 / 1918 / 747
Регистрация: 06.06.2017
Сообщений: 6,671
20.05.2021, 18:04 10
-o $\###_%date%.jpg
1
-3 / 2 / 0
Регистрация: 29.10.2013
Сообщений: 170
20.05.2021, 18:51  [ТС] 11
FlasherX, Благодарю.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2021, 18:51

Привязка к имени файла размера и расположения его окна
Существует ли какая нибудь утилита для того, что бы винда запоминала расположение и размер окна с...

Пакетная обработка
Имеется файл ini.txt. Как правильно и грамотно его распарсить. Впервые делаю пакетную обработку. И...

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

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

Динамическая смена имени ресурсного файла изображения
Добрый день уважаемые форумчане! небольшой кусок кода: int z1,q1; z1 =...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.