7/09/2007

ImageMagick - мощный консольный графический редактор

Часто требуется не просто обработать или улучшить изображение, но применить последовательность операций к большому количеству изображений. В этом нам поможет консольный графический редактор ImageMagick.


Установка и первые шаги
Устанавливается черзвычайно просто:
apt-get install imagemagick
и всё. Но дальше меня лично ждал сюрприз: а где, собственно, программа? На самом деле этот пакет содержит несколько программ: display, animate, identify, convert, montage, mogrify и composite. Здесь я приведу свой скромный опыт работы с основной программой пакета - всемогущей convert.

С пакетом ImageMagick (во всяком случае в Дебиане) поставляется могучий мануал в PDF на 320 страницах - весьма толковое руководство, но на английском. До его завершения весьма далеко: описаны только опции командной строки, а остальное просто набросано.


Консольный графический редактор
У многих моих подоконных товарищей такое словосочетание вызывает когнитивный диссонанс: как графический редактор может быть консольным!? Может, и бывает чрезвычайно полезен, когда нужно обработать не одно, а множество изображений, лежащих к тому же в разных каталогах. Естественно, в альтернативной среде приняты наиболее топорные средства решения проблем: тыкать и выделять мышкой, и для каждого файла повторять процедуру. Самые продвинутые слышали об Action в фотошопе, но и это средство - не панацея (а кроме того, требует немалого времени на отладку комбинации действий).

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


Операции с цветом
Имеется в виду изменение цветовых пространств: RGB/CMYK, grayscale и BW. Всё, что связано с изменением цветов.

Перевод в оттенки серого
-colorspace GRAY
Например: convert -colorspace GRAY tux.jpg tuxConvertGray.jpg
На самом деле ключ colorspace позволяет переводить изображения между разными цветовыми пространствами: GRAY, OHTA, RGB, Transparent, XYZ, YCbCr, YIQ, YPbPr, YUV или CMYK.


Перевод в чёрно-белое изображение

Здесь есть несколько методов: бинаризация по порогу (threshold), с диффузией ошибки (метод Floyd/Steinberg, error diffusion) и локальный адаптивный порог.

Бинаризация с диффузией ошибки выполняется ключом:
-dither
-monochrome
Вместе с этой опцией следует применять ключи -colors или -monochrome для определения цветового пространства, к которому применяется преобразование.

Бинаризация по порогу делается при помощи ключа:
-threshold число
где число - значение порога.
Пример: convert -threshold 128 1.png 2.png

Локальная адаптивная бинаризация по порогу производится при помощи следующего параметра:
-lat ШиринаxДлина{+-}Смещение{%}
Здесь имеется в виду область размером ШиринаxДлина, в пределах которой происходит порог. Смещение определяет степень отклонения значений пикселей (в процентах). Данные параметры стоит подбирать с визуальным контролем (запустить ещё и просмотрщик изображений).
Пример: convert -lat 3x3+5% tux.jpg tuxConvertedLat3x3.jpg


Постеризация
Уменьшение количества цветов на изображении:
-posterize числооттенков
до числаоттенков приводит к сокращению и "огрублению" оттенков изображения.


Инвертирование

Чтобы инвертировать изображение (цветное или полутоновое), надо указать ключ:
-negate
Действует для цветых и полутоновых изображений.


Изменение разрядности изображения

Чтобы перевести 16-битное изображение в 8-битное, нужно воспользоваться ключом:
-depth 8
Кто сказал, что в Линукс нельзя работать с 16-битным цветом?





Операции с освещённостью
Всё, что касается освещённости пикселей, без привязки к цветовому пространству: гамма-коррекция, контрастирование.

Повышение / понижение контраста
Изменение контрастности изображения достигается:
-contrast

+contrast
При этом -contrast повышает контрастность, а + понижает.
Пример: convert -contrast tux.jpg tuxConvertedContrast-50.jpg


Эквализация гистограммы

Автоматическое контрастирование изображения:
-equalize

Производит автоматическую эквализацию гистограммы - алгоритм изменяет гистограмму изображения так, чтобы она была равномерна по светам и теням.


Нормализация

Для того, чтобы значения пикселей изображения занимали весь диапазон, следует указать ключ:
-normalize
Этим достигается повышение контраста на изображении.


Гамма-коррекция

Для гамма-коррекции изображения следует указать ключ:
-gamma значение

Значения меньшие 1.0 делают изображение темнее, значения более 1.0 осветляют изображение. Наиболее часто применяемые значения лежат в пределах от 0.8 до 2.3
Можно применять разные значения гамма-коррекции для разных цветовых каналов, например так: -gamma 1.7/2.3/1.2


Уровни

Более тонкая настройка контрастности изображения при помощи уровней:
-level точкачёрного{,точкабелого}{%}{,значениегаммакоррекции}
можно указывать как в абсоютных величинах, например -level 10,65000 так и в процентах -level 2%,98%
По умолчанию гамма стоит равная 1.0 (то есть без гамма-коррекции), но её можно задать, например, так -level 2%,98%,0.8





Геометрические преобразования
Здесь я приведу несколько полезных команд, которые позволяют менять масштаб изображения или кадрировать его. Безусловно, вслепую определить точные координаты очень сложно, но ведь никто не воспрещает использовать консольные и графические утилиты вместе?


Изменить размер изображения
Можно задать точный размер в пикселях:
-resize MMMxNNN

изменить размер изображения на MMMxNNN. При этом плотность изображения сохраняется изначальной.
Можно задать в процентах:
-resize 200%
то есть увелилить в 2 раза.

Более быстрый, но грубый алгоритм маштабирования:
-scale число%
масштабирует изображение в заданном процентном соотношении.


Кадрировать изображение
Для кадрирования изображения следует использовать:
-crop ШиринаxВысота{+-}<ИсходноеХ>{+-}<ИсходноеY>{%}
Имеется в виду, что требуется вырезать область ШиринахВысота, причём область смещена на значение ИсходноеХ и ИсходноеY пикселей. Значения двух последних параметров - на самом деле просто координата левого верхнего угла области, для которой указаны данные ширины и высоты. Описание дано в терминологии GiMP: если там вызвать диалог кадрирования, то станет понятным, что имеется в виду.
Пример: convert -crop 95x85+50+12 tux.jpg tuxConvertedCrop.jpg


Изменить плотность изображения

Для того, чтобы задать количество пикселей на дюйм, следует воспользоваться ключом:
-density DPIгоризонтальноеxDPIвертикальное
-density число
Первый вариант нужен тогда, когда по вертикали и горизонтали разрешение разное. Второй вариант проще: если нужно задать разрешение, одинаковое в обоих направлениях.


Поворот изображения

Чтобы повернуть изображение, указываем:
-rotate "+-градусы"
Для того, чтобы повернуть изображение по часовой стрелке, пишем -rotate "+90" для поворота против часовой стрелки, соответственно
-rotate "-90"
Если поворот производится на произвольное число градусов, то изображение поворачивается как целое, увеличиваясь для вмещения исходной картинки. Появившиеся области становятся цвета фона, который определяется параметром -fill цвет.
Несколько слов о заполнении:
  • если надо заполнить цветом по-быстрому и особенно не думать, можно указать именованый цвет (yellow, black, white). Полный их перечень можно получить командой convert -list color
  • если заполнять надо точно известным цветом, можно указать его в формате #RGB (R,G,B are hex numbers, 4 bits each)
  • convert -fill blue ...
    convert -fill "#ddddff" ...
    convert -fill "rgb(65000,65000,65535)" ...




Фильтры для улучшения изображений
Приведены алгоритмы размытия / повышения резкости и шумоподавления.

Размытие по Гауссу
Чтобы размыть изображение по Гауссу:
-blur Радиус
-blur РАДИУСxСИГМА
Размытие изображения по Гауссу на РАДИУС пикселей. Опционально можно задать степень (стандартное отклонение) - задав СИГМУ.


Радиальное размытие
Размыть изображение, "завращав" его вокруг центра, можно:
-swirl градус
на заданное количество градусов.


Удаление спекл-шума
Простой метод удаления спекл-шума (мультипликативный шум):
-despeckle
Действие приводит к лёгкому размытию.


Выделение краёв

Для выделения краёв на изображении следует использовать ключ:
-edge радиус
Приводит к появлению оконтуренного изображения (по всей видимости, применяется метод Собела).


Увеличение резкости

Для того, чтобы изображение стало более резким, можно применить ключ:
-sharpen РадиусxСигма
Используется оператор Гаусса, требуется задание радиуса и стандартного отклонения (Сигма)


Медианная фильтрация
Для удаления импульсного шума с изображения следует использовать медианную фильтрацию:
-median радиус
значение параметра задаёт область оценки шума для алгоритма.


Нечёткая маска
Для повышения резкости изображение, особенно на контурах, можно применить нечёткую маску:
-unsharp РадиусxСигма+величина+порог
Используется оператор Гаусса, которому требуется задать Радиус и Сигму (для достижения хороших результатов радиус должен быть больше сигмы). По умолчанию 0 и 1.0 соответственно.
Параметр величина есть процент разницы между оригинальным и нечётким изображением, умолчание 1.0, а порог - величина количественной разницы между изображениями (умолчание 0.05).

У некоторых пользователей возникает дескрипанс: как же так, типа Unsharp, а повышает резкость? Дело в том, что фильтр получил своё имя потому, что его действие выглядит так, как будто из изображения вычли его нерезкую копию. Никакого вычитания, конечно, не происходит: выполняется свёртка с ядром Гаусса 3х3 пикселей, но это уже другая история.

Добавление / удаление шума (по ближайшим соседям)
Шумоподавление выполняется при указании ключа:
-noise радиус
Удаление шума с изображения на основе анализа величин значений ближайших пикселей в области заданного радиуса. Пиксель считается шумовым и заменяется на среднее по области, если и только если значение пикселя является максимумом или минимумом в данной области.

Чтобы добавить шум к изображению, указываем:
+noise тип
Можно добавить шумы: Uniform (однородный), Gaussian (Гауссов), Multiplicative (спекл-шум), Impulse (импульсный), Laplacian (Лапласов шум), Poisson (шум Пуассона).



Вместо заключения
Мне давно хотелось разобраться с возможностями ImageMagick, а тут выдалось время, когда вся работа сделана, а новой ещё не нагрузили :-) К сожалению, фраза сейчас не актуальна :-)))

Ссылки
Мануал в формате PDF я уже упоминал, очень толковая вещь, но занудно написанная и довольно неряшливая. Начальные сведения можно найти у моего забугорного коллеги, продвинутые сведения и приёмы - у орлов из IBM. Товарищ jetxee привёл несколько примеров использования ImageMagick в скриптах. Этого должно хвтатить на первое время.

32 комментария:

  1. ImageMagick очень удобно использовать для массовой обработки фотографий, например:

    for fname in *.jpg; do mogrify -resize 640 $fname; done

    уменьшает все картинки в каталоге до ширины 640, что полезно для выкладывания в интернет.

    Причем пользоваться ImageMagick-ом можно и под Windows:

    for %fname in (*.jpg) do mogrify -resize 640 %fname;

    И никакой ворованный фотошоп не нужен :)

    ОтветитьУдалить
  2. Антон, спасибо за такие полезные сведения. Обязательно включу их в пост! Про то, что и под виндой можно использовать, не знал :-)

    ОтветитьУдалить
  3. Спасибо за статью!

    Мне как то на работе надо было обработать около 200 фотографий, жалко не знал про эту софтину(... Пробовал писать обработчик на питоне, но библиотека которой пользовался довольно криво ресайзила изображения... пришлось воспользоваться фотожоповскимм action и окнами:(, да и то не сильно то помогло - фотки разные, а в экшены никак логики не добавить... а так бы написал шел скрипт и готово!

    ОтветитьУдалить
  4. Я для обработки примерно 500 снимком под оффтопиком использовал nconvert из пакета XnView. Пара минут и вся работа выполнена ;-)

    ОтветитьУдалить
  5. 2 Анонимный пишет...
    Спасибо за статью!
    Пожалуйста. Просто сам давно пользуюсь IM и вот решил заставить себя разобраться с остальными параметрами. Как всегда, узнал много нового. Теперь захожу сюда периодически и сам читаю :-))

    Мне как то на работе надо было обработать около 200 фотографий, жалко не знал про эту софтину
    Лучше поздно, чем никогда :-) У меня изображений обычно бывает за тысячу, поэтому на IM вышел в своё время сразу.

    2 denvist пишет...
    Я для обработки примерно 500 снимком под оффтопиком использовал nconvert из пакета XnView.
    Интересно. Поискал в репозитории - не нашёл. Гугл помог - попробую. Спасибо.

    ОтветитьУдалить
  6. Хорошо написано. Молодец!

    По поводу массовой обработки для выкладывания фотографий я тоже уже писал (http://sovety.blogspot.com/2006/11/bash.html).

    Хочу обратить внимание, что в большинстве случаев очень желательно указывать параметр -quality. Imagemagick имеет тенденцию сильно пережимать jpeg-и.

    ОтветитьУдалить
  7. 2 jetxee пишет...
    Хорошо написано. Молодец!
    Спасибо, стараюсь :-)

    По поводу массовой обработки для выкладывания фотографий я тоже уже писал (http://sovety.blogspot.com/2006/11/bash.html).
    Классная ссылка, как-то я её пропустил. Теперь поставил в посте.

    Хочу обратить внимание, что в большинстве случаев очень желательно указывать параметр -quality. Imagemagick имеет тенденцию сильно пережимать jpeg-и.
    Не замечал за ним такого. Может потому, что чаще всего работаю с TIFF :-) Надо будет приглядеться...

    Немного поправил пост, добавил ссылки. Ценные мысли и ссылки всячески приветствуются.

    ОтветитьУдалить
  8. Хорошая статья.

    Но хотелось бы поправить автора.

    IM всё-таки не редактор, а конвертер. Т.е., средство для преобразования изображений тем или иным методом.

    А графический редактор - понятие, которое предполагает непосредственное изменение того, что ты видишь на экране.

    Самая яркая аналогия - это vi и grep. Первое - редактор, второе - средство для преобразования.

    ОтветитьУдалить
  9. анонимному:

    grep — не средство преобразования, а средство фильтрации/поиска.

    более уместно сравнение vi vs sed.

    ОтветитьУдалить
  10. Фильтрация есть преобразование потока данных

    ОтветитьУдалить
  11. 2 Анонимный пишет...
    Но хотелось бы поправить автора.
    IM всё-таки не редактор, а конвертер. Т.е., средство для преобразования изображений тем или иным методом.

    Конвертор - это sam2p и ему подобные tiff2png например. IM это намного, намного больше. Можно взять jpg-фотографию, повысить в ней резкость и изменить гамму, результат записав в другой файл. Ну и чем это отличается от 100% графического редактора The GIMP!?

    А графический редактор - понятие, которое предполагает непосредственное изменение того, что ты видишь на экране.
    Видимо, у нас разные понятия :-) Не важно, где происходит изменение - важен факт того, что программа не просто пересохраняет в другом формате, а имеет все признаки серьёзного графического редактора. Собственно, поэтому пост так и назван.

    2 jetxee пишет...

    анонимному:

    grep — не средство преобразования, а средство фильтрации/поиска.

    Именно! А IM - способен редактировать результат. Какой конвертор способен делать crop и resize?

    ОтветитьУдалить
  12. Вот популярный пример из Форточек - программа ACDSEE.

    Умеет всё, что перечислено. И тем не менее, это не редактор, а конвертер.

    Вот определение графического редактора: http://ru.wikipedia.org/wiki/Графический_редактор

    А вот ссылка на описание IM: http://ru.wikipedia.org/wiki/ImageMagick

    Максимум, с чем можно согласиться, это утверждение, что IM - библиотека функций для обработки изображений.

    Друзья, пардон, но всё-таки определение неверное.

    ОтветитьУдалить
  13. Пасиб!!! Очень кстати прочитал вашу статью :)
    Как раз нужно промаштабировать уйму фоток для галереи и возможно добавлю еще логотип :)

    ОтветитьУдалить
  14. Спасибо автору за ценную инфу!!!
    А вообще день ото дня просто поражаюсь величию и простоте линукса (перешел 2 недели назад)....а прога что надо для пакетной обработки фото. и главное как все просто и быстро)))
    еще раз спасибо!

    ОтветитьУдалить
  15. 2 Анонимный пишет...
    Вот популярный пример из Форточек - программа ACDSEE.
    Я уже не знаю, что это за программа. Судя по тому, что видел в последний раз - комбайн, умеющий всё, кроме комфортного просмотра изображений :-) Мне мой GQview милей в сто раз: простой, быстрый и функциональный в меру.

    Вот определение графического редактора
    Ну, википедия это не аргумент, если честно. На сайте IM написано: "ImageMagick is a software suite..."
    Насколько мне позволяют мои скромные познания в англицком, сие есть "программный пакет". Ну ладно, будем считать его пакетом. Убедили.

    Друзья, пардон, но всё-таки определение неверное.
    Ммм... чую светлую сторону силы в мыслях ваших... на размышление время требуется некоторое мне :-)

    2 zer пишет...
    Пасиб!!! Очень кстати прочитал вашу статью :)
    А я давно хотел разобраться с настройками IM. Не далее как вчера сам сидел и читал её :-)

    Как раз нужно промаштабировать уйму фоток для галереи
    Именно под такие цели IM и заточен.

    2 Анонимный пишет...
    А вообще день ото дня просто поражаюсь величию и простоте линукса
    Аналогично. В самом деле, именно в никсах (Линукс\БСД) так много простых мелочей, но без которых очень некомфортно в других системах. Консоль, нормальное автодополнение, find\grep\sed\, ssh... простые вещи, а поди ж ты :-)

    а прога что надо для пакетной обработки фото. и главное как все просто и быстро)))
    Действительно. Это не по одной картинке мышкой тыркать: ввввжик - и пара сотен обработано :-)

    еще раз спасибо!
    На здоровье! :-)

    ОтветитьУдалить
  16. Подскажите пожалста, в чём я дурак?
    Беру изображение JPEG 24 бит цветности (сканированный рисунок) и пытаюсь его скормить конвектору:
    convert -colorspace GRAY 1.jpg 2.jpg
    на что получаю:
    Bogus input colorspace

    Если перевожу в оттенки серого Гимпом - потом всё работает, например:
    convert -colorspace GRAY 1.jpg 2.xpm

    Хотя понятно, что конвертирования цветовой палитры не происходит, но всё же! Оччень интереснО!

    PS Автору огромное уважение, его записи уже столько раз выручали!

    ОтветитьУдалить
  17. При масштабировании желательно указывать фильтр сглаживания.((-filter)

    >Подскажите пожалста, в чём я дурак?

    Не верный синтаксис, надо так: convert 1.jpg -colorspace GRAY 2.jpg

    ОтветитьУдалить
  18. Хостер дал путь, я вписал в галеру куда надобно в админке, после этого она превьюхи перестала делать, у меня до этого была похожая проблема с другой галерой, переключил на GD - работает.
    Вот я и мыслю - или хостер не знает, что она не работает, или я дурак.
    Есть ли быстрый способ проверить ее работу - т.е. работоспособность и наличие на хосте?

    ОтветитьУдалить
  19. Хостер то дал :) если есть ссх - проверь через него выполнить любую тестовую команду - и гугл тебе в помощь. Если в ссх пашет, то проблема в пхп (скорее всего). Вообще имаджмаджик либо присутсвует в пхп либо нет, пути указывать не надо как правило, пути знает модуль пхп, который и делает системные вызовы. А если ты напрямую пытаешься послать команды на имаджмаджик из пхп - то это может и не получиться :)

    ОтветитьУдалить
  20. Можно ли каким либо способ обрезать картинку с левой стороны? подскажите плиз...

    ОтветитьУдалить
  21. Есть такая картинка:
    http://pic.ipicture.ru/uploads/090225/PZW2JJVRfc.jpg

    Посоветуйте, пожалуйста, если это не очень сложно, как:
    1. Убрать фон.
    2. Сделать чёрно-белым.

    Делал -monochrome, то что нужно, но размер картинки увеличивается в 2 раза.

    Заранее спасибо

    ОтветитьУдалить
  22. Спасибки за обзор. Искал чем бы массово отконвертировать пачку файлов. Причем под оффтопиком ) Оказалось бинарники под оффтопик есть на оффсайте. Порадовался.) Еще раз спасибо.
    Едиственное чего не понял - можно ли выполнить два преобразования в одну команду. То есть я делаю вот так (на примере одного файла):
    converter 1.png 1.tif
    converter -colorspace CMYK 1.tif 1r.tif
    Ну то есть из png в тиф и потом в CMYK, А вот можно ли это как-то сделать за один раз?

    ОтветитьУдалить
  23. А как это можно сделать через GUI? Есть программа для Gnome?

    ОтветитьУдалить
  24. Помогите пожалуйста решить задачу.
    Есть куча скринов с разных видео. Они имеют разные размеры и пропорции по ширине и высоте.
    Как мне можно вырезать картинки с пропорцией 3 к 4 из центра кадра?

    ОтветитьУдалить
  25. Здравствуйте virens, может вы подскажете, как можно указать чтобы горизонтально расположенные рисунки ресайзил до одной ширина, а вертикальные до другой (к примеру горизонтальные до 500px, а вертикальные до 400px) ?

    ОтветитьУдалить
  26. converter -colorspace CMYK 1.png 1r.tif

    ОтветитьУдалить
  27. навеки в закладках, спасибо!

    ОтветитьУдалить
  28. Присоединяюсь к sysa! IrfanView выполняет пакетное изменение размера изображения по наибольшей стороне. Как это осуществить в mogrify.exe? Применение -resize MMMxNNN при 1024х768 на рисунок 768х1024 действует как 1024х1365.
    Кстати, mogrify.exe удаляет оригинал, поэтому в свои скрипты можно добавить что-то наподобие for %%a in ("*.jpg") do copy "%%a" "%%~na.jpg.bak"

    ОтветитьУдалить
  29. Скачал пакет "ftp://mirror.aarnet.edu.au/pub/imagemagick/binaries/", нашел convert.exe, но то же самое. Изменяет размер независимо от portrait/landscape положения. Пока вижу выход уменьшать картинку в процентном соотношении, если заранее известно, что все фото одинакового разрешения ;(

    ОтветитьУдалить
  30. Как можно использовать здесь преобразование Фурье для морфинга одного изображения в другое?

    ОтветитьУдалить
  31. Привет всем. помогите пожалуйста,а то я мозгом уже потёк.
    нужен скрипт который бы ресайзил картинку и наносил на неё водяной знак. вот что я написал >>>
    #!/bin/sh

    # Dialog box to choose thumb's size
    SIZE=`zenity --list --title="Выберите размер новой картинки" --radiolist --column="Выбор" --column="Размер по большой стороне" "" "100X100" "" "150X150" "" "200X200" "" "250X250" "" "300X300" "" "350X350" "" "400X400" "" "450X450" "" "500X500" "" "550X550" "" "600X600" "" "650X650" "" "700X700" "" "750X750" "" "800X800" "" "850X850" "" "900X900" "" "950X950" "" "1000X1000" "" "1050X1050" "" "1100X1100" "" "1150X1150" "" "1200X1200" "" "1250X1250"`

    if [ "${SIZE}" == "" ]; then
    zenity --error --text="Размер не выбран. Для использования выберите размер. "
    exit 1
    fi

    #####
    # Creating thumbnails for watermark. Directory for watermark "$HOME/WaterMark/", file "stamp.png"
    convert -resize "${SIZE}" -bordercolor black -quality 100 "$HOME/WaterMark/stamp.png" "$HOME/WaterMark/stampTMP.png"
    STAMP=$HOME/WaterMark/stampTMP.png
    if [ "${STAMP}" == "" ]; then
    zenity --error --text="Файл водяного знака не выбран. Выберите водяной знак , или
    в домашнем каталоге создайте папку WaterMark,
    и положите в неё водяной знак с именем stamp.png "
    exit 1
    fi
    #####


    # How many files to make the progress bar
    PROGRESS=0
    NUMBER_OF_FILES=`find -iname "*.jpg" -maxdepth 1 | wc -l`
    let "INCREMENT=100/$NUMBER_OF_FILES"

    mkdir -p thumbnails

    # Creating thumbnails. Specific work on picture should be add there as convert's option
    (for i in *.jpg *.JPG; do
    echo "$PROGRESS";
    echo "# Обработка $i";
    PIC=`convert -resize "${SIZE}" -bordercolor black -quality 90 "${i}" thumbnails/${i%.*}".jpg"`
    composite -gravity south -geometry +0+10 "${STAMP}" "${PIC}" "${PIC}'.jpeg'"

    #####
    #composite -gravity south -geometry +0+10 "${STAMP}" "${PIC}" "${PIC}"



    #####

    let "PROGRESS+=$INCREMENT"
    done
    ) | zenity --progress --title "$Creating создание..." --percentage=0

    #process png
    # How many files to make the progress bar
    PROGRESS=0
    NUMBER_OF_FILES=`find -iname "*.png" -maxdepth 1 | wc -l`
    let "INCREMENT=100/$NUMBER_OF_FILES"

    mkdir -p thumbnails

    # Creating thumbnails. Specific work on picture should be add there as convert's option
    (for i in *.png *.PNG; do
    echo "$PROGRESS";
    echo "# Обработка $i";
    convert -resize "${SIZE}" -bordercolor black -quality 90 "${i}" thumbnails/"${i}"
    let "PROGRESS+=$INCREMENT"
    done
    ) | zenity --progress --title "$Creating создание..." --percentage=0

    в папке $HOME/WaterMark файл stamp.png это водяной знак в большом разрешении.

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

    ОтветитьУдалить
  32. Делаю start.bat с содержимым for %fname in (*.jpg) do mogrify -resize 640 %fname; и ничего не работает как поправить?

    ОтветитьУдалить