Convert

If you're on some Linux system, imagemagick is perfect. I.e This works with heaps of different formats.

For other media such as videos and audio use (ffmpeg)  I know you clearly stated png to svg, however; It's still media related. Just a tip for if you wish to go through lots of files; a loop using basic shell tricks.. That removes the jpg and adds png which tells convert what you want.

convert
Очень часто у многих появляется задача массового изменения фотографий или других изображений. К примеру вы только что сделали пару сотен фотографий и хотите скинуть их на файлообменный сервис, но они занимают слишком много места. Можно уменьшить их разрешение что‐бы они стали меньше, но уменьшать каждую картинку по одному очень долго. Тут на помощь придут возможности shell и утилита convert из пакета ImageMagick (или GraphicsMagick).

Для массового изменения изображений можно воспользоваться возможностями командной оболочки. К примеру цикл for в bash.

(or for name in `ls *.jpg`; do convert -resize 640x480 $name mini/$name; done)

Или в tcsh с помощью foreach.

Или можно с помощью xargs.

Или разделённые нулевым символом.

Есть ещё десяток способов а то и больше как работать с множеством файлов, но эта статья не об этом. По этому дальше примеры будут показываться на одном файле за исключением некоторых случаев. В качестве аргументов параметру -resize можно давать также проценты.

Также можно добавить параметр -quality который задаёт уровень сжатия.

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

Градус может быть любым, но если он не делиться на 90 нацело, то пустые места будут заполнены белым цветом. При желании цвет можно поменять с помощью опции -background. К примеру, возьмём вот такое изображение:

Перевернём его на 120 градусов.

В результате получим такое:

Как видим оно дополнилось белым цветом, а разрешение стало больше (тут не заметно так как для норм вёрстки изображения обрезаны по одному размеру, для просмотра оригинального изображения нажмите на него). Теперь приведём пример с использованием опции -background.

Получим такое:

Цвет можно задать несколькими способами. К примеру красный:

Короткое имя цвета можно посмотреть с помощью такой команды:

Утилита convert может делать несколько действий сразу. К примеру можно изменить размер изображения и перевернуть его одновременно. Очередность указания опций также имеет значение. Первым исполняются те действия которые были указанны первыми. Так команда:

и команда

приведут к разным результатам. В первой команде мы сначала изменяем размер и потом переворачиваем изображение, во второй сначала переворачиваем, а потом меняем размер того что получили. Часто приходится обрезать края изображения. Утилитой convert это можно сделать с помощью опции -chop, -shave. Опция -shave удаляет одинаковые поля с обеих сторон.

Этот пример удалит 200 пикселей с левой и правой стороны.

А эта команда удалит 200 писелей с права и лева, и 300 пикселей с верху и снизу. Обе эти опции опции, а также -resize, принимают в качестве аргумента geometry. Этот аргумент может быть задан разными способами, выше демонстрировалось только два — в процентах и параметры ширины и высоты. Опция -shop удаляет слева и сверху.
 * scale% —	Высота и ширина заданная в процентах.
 * scale-x%xscale-y% —	Процент заданный для высоты и ширины отдельно. (Достаточно одно символа % .)
 * width —	Задана только ширина, высоты выставляется автоматически с таким‐же соотношении как было.
 * xheight —	Задана высота, ширина автоматически выставляется по соотношению сторон.
 * widthxheight —	Максимальное значение ширины и высоты, соотношение сторон остаётся таким‐же.
 * widthxheight^ —	Минимальное значение ширины и высоты, соотношение сторон остаётся таким‐же.
 * widthxheight! — Задаётся значение ширины и высоты, соотношение сторон игнорируется.
 * widthxheight> —	Работает также как widthxheight но только если изображение больше указанного размера.
 * widthxheight< —	Изменить разрешение только если оба размера изображения превышают то которое заданно.
 * area@ —	Изменить размер изображения что-бы оно имело такое количество пикселей.

Указанная команда удалит 200 пикселей с лева и 100 сверху. Место откуда вырезаются пиксели можно поменять с помощью опции -gravity. Просмотреть все варианты можно с помощью команды:

По умолчанию она установлена в NorthWest. Для того что‐бы операция chop удаляла пиксели с права и сверху опцию -gravity необходимо поставить в SouthEast. Например:

Если надо обрезать поля со всех сторон, можно применить операцию chop дважды с разным gravity.

Эта команда удалит 100 пикселей с лева, 150 сверху, 200 с права и 200 снизу. Есть другой вариант обрезать края со всех сторон, но он не такой эффективный.

Результат получается такой‐же но утилита convert делает лишние действия по обращению изображения. Также можно удалять пиксели из центра но как правило это не имеет смысла. Опция -splice наоборот, добавляет новые пиксели цвета который указан с помощью -background, а если он не указан используется белый. Новые пиксели по умолчанию добавляются слева и сверху, но это можно изменить с помощью опции -gravity аналогично как и с chop.

элкниги
Есть отсканированные документы и из них надо собрать djvu или pdf книгу. Для того чтобы их превратить в pdf документ можно воспользоваться ImageMagick(или GraphicsMagick). Простой пример создания pdf документа: В GrapicsMagick эта команда может выглядеть так: Вместо  *.jpg  можно использовать другой формат или список файлов. Список файлов удобнее использовать для того, чтобы задать порядок следования страниц в файле. Например:

или

В этом примере  sort -n  используется для изменения порядка следования страниц. Файл который получается может оказаться слишком большим. Чтобы уменьшить его можно воспользоваться алгоритмами сжатия которые поддерживают pdf документы. Список алгоритмов сжатия приведён ниже в таблице: Zip — это алгоритм сжатия без потерь. Есть смысл его использовать только если исходное изображение в формате tiff,pbm,pnm,pgm или аналогичном. Наибольшего результата сжатия можно добиться используя алгоритм сжатия с потерями jpeg. При сжатии с потерями для указания качества в процентах используется опция  -quality. Например: Также можно использовать опцию  -monochrome  для создания чёрно-белых документов, что уменьшит размер выходного файла. Алгоритм сжатия fax можно использовать только с чёрно-белыми изображениями. Также чтобы уменьшить размер файла можно изменить разрешение c помощью опции  -resize.

Теперь попробуем создать djvu файл. Для этого сначала надо преобразовать изображения в формат ppm,pgm или pbm. Pnm — используется для цветных изображений, pgm — чёрно-белые с градациями серого, а pbm чёрно-белый без градаций серого (есть только чёрный и белый). Формат pnm может представлять файлы в форматах ppm,pgm и pbm. Естественно, если использовать изображения в формате pbm то выходной djvu файл будет меньше. Сначала конвертируем все изображения в формат pnm. Для этого можно воспользоваться ImageMagick или утилитой anytopnm. Конвертировать одно изображение можно так:

или

Все файлы можно конвертировать таким образом:

После того, как изображения конвертированы в ppm те, которые не содержат цветов можно конвертировать в pgm c помощью ppmtopgm.

Это тоже можно сделать в цикле. Теперь pgm изображения можно преобразовать в pbm с помощью pgmtopbm. Например:

Опция  -threshold  задаёт алгоритм преобразования, а  -value  число переход от белого к чёрному. Чем выше  -value  тем чернее будет изображение. После этого все файлы ppm, pgm, pbm переименовываем в pnm, так как там будет проще сними работать. Далее превращаем каждое изображение в формат djvu. Для этого используем с44. Или всё сразу:

Опция  -slice  влияет на выходной размер файла, детальнее опции утилиты с44 смотрите на сайте разработчика. Теперь осталось только объединить все djvu файлы в один. Всё теперь требуемая книга в формате djvu готова.