Ru-Board.club
← Вернуться в раздел «Графика»

» ImageMagick, GraphicsMagick: convert, montage, mogrify и др.

Автор: ASE_DAG
Дата сообщения: 02.08.2013 00:44

ImageMagick
display, convert, montage, mogrify, conjure, identify, compare, animate, composite, import, stream



| Офсайт | Сорсфорж | Википедия | Фрешмит | Охлох |


ImageMagick (Имидж-мэджик) — свободный и кроссплатформенный инструмент для обработки изображений, один из старейших и наиболее мощных из ныне живых, имеет множество программных (для Си, Си++, Перла, Питона и т. д.) и два пользовательских интерфейса: практически неиспользуемый графический и неинтерактивный, который представлен набором консольных утилит, перечисленных в подзаголовке. Последний сегодня занимает серьезную нишу пакетной обработки графики. Преимущественно ему и посвящена эта ветка.

Документация: http://imagemagick.sourceforge.net/http/www/ImageMagick.html
В стиле мана: сухо, без примеров и картинок.

http://imagemagick.org/script/command-line-tools.php
Есть и примеры для распространенных задач, и описание всех опций.

Examples of ImageMagick Usage
Самый подробный учебник в примерах. Годен для чтения по порядку.

Fred's ImageMagick Tidbits
И в первую очередь последняя их часть Image Processing. Разбор сложных, многоходовых примеров.

Fred's ImageMagick Scripts
Коллекция готовых несвободных шелл-скриптов на основе Имидж-мэжджика. Алгоритм действия каждого кратко разобран.




GraphicsMagick
gm display, gm convert, gm montage, gm mogrify, gm conjure, gm identify, gm compare, gm animate, gm composite, gm import, gm batch



| Офсайт | Сорсфорж | Википедия | Фрешмит | Охлох |


GraphicsMagick (Графикс-мэджик) — активно развивающийся форк ImageMagick’а. Несмотря на уже более чем десятилетнюю самостоятельную историю, пакет с точки зрения пользователя до сих пор во многом идентичен родителю, хотя и не имеет обратной совместимости.
Автор: ASE_DAG
Дата сообщения: 02.08.2013 19:32
Что спрашивали и отвечали про Имидж-мэджик на Руборде ранее, из того, что я сумел найти:

ASE_DAG (15:59 02-09-2012)
Цитата:
> страницы вордовского файла ... в рисунки jpg?
Месье знает толк? Может быть все-таки PNG, не?

Плагин м. б. и существует, но я не вижу проблем сперва экспортировать в PDF, а его уже преобразовать в картинку.

$ convert file.pdf file.%02d.png



ASE_DAG (19:59 16-05-2011)
Цитата:
> Нужно разбить картинку на несколько частей...
$ convert largeimage.jpg -crop 256x256 +repage largeimage.%03d.jpg



ASE_DAG (15:02 24-06-2011)
Цитата:
> из исходного файла source.tiff прямоугольный участок с верхней левой координатой(32,111) размером (1410*1080) сохранить в файл succ.jpg

$ convert -crop 1410x1080+32+111 source.tiff succ.jpg



ASE_DAG (04:18 08-12-2011)
Цитата:
> нужно, чтобы текст накладывался на изображение по центру в одну строку,
> выбирая размер шрифта исходя из количества символов
Ну вот вам пример команды шелла, с использованием ImageMagick’а. Это в константах, цикл по строкам файла, думаю, сами напишите.

$ convert -background transparent -fill red -font Open-Sans-Bold -size 300x60 -gravity center label:'Lorem!' miff:- | composite - pattern-bubbles.png lorem.png




ASE_DAG (00:15 31-01-2011)
Цитата:
> какой программой можно склеить фрагменты встык
Я бы склеил утилитой montage из пакета imagemagick.
$ montage -tile 1x12 -geometry +0+0 `ls -v` miff:- | montage - -tile 15 -geometry +0+0 map.jpg
Комментарии нужны?

P.S. Да, можно было не извращаться в два подхода, а сперва переименовать файлы — поменять ординату и абсциссу местами, т.е.
$ rename 's/4-(\d+)-(\d+).jpg/4-$2-$1.inv.jpg/' *
$ montage -tile 15x12 -geometry +0+0 `ls -v *.inv.jpg` map.jpg



Alex_Piggy (17:24 29-08-2012)
Цитата:
> развернуть картинку на ноль (-угол), вырезать прямоугольник 80х20, развернуть еще раз, так что бы стало в нужное положение (180+2*угол)?
convert test.jpg -crop 200x200+163+188 -rotate $[-$IN-90] jpg:- | convert - -crop 80x20+0+90 -rotate $[270+$IN] out.jpg


Автор: ONEVZOR1
Дата сообщения: 07.08.2013 20:22
ImageMagick 6.8.6.8

changelog    

Автор: ASE_DAG
Дата сообщения: 07.08.2013 20:34
ONEVZOR1
> ImageMagick 6.8.6.8
А как ваши личные впечатления?
Автор: kost2005
Дата сообщения: 10.08.2013 20:36
Господа! Помогите скриптом для ImageMagick, пакетная конвертация из jpg в tif, а то у меня на выходе получается один многослойный tif. Ну пожалуйста.
Автор: Alex_Piggy
Дата сообщения: 10.08.2013 21:44
Доброе время, kost2005
convert *.jpg +adjoin -set filename:f "%t" "%[filename:f].tif"
Автор: kost2005
Дата сообщения: 10.08.2013 22:38
Alex_Piggy Спасибо Вам! Работает как часы.

Может подскажете ещё один момент - задача энное количества jpg склеить в один, но как известно при всех манипуляциях с jpg вроде склейки, резки и т.п. качество теряется, и мне посоветовали перед склейкой конвертнуть jpg в tif или png, что в этом случае потерь в качестве не будет. Верно ли данное утверждение?
Заранее спасибо за ответ.
Автор: Alex_Piggy
Дата сообщения: 11.08.2013 00:13
kost2005
Не знаю. Не уверен. Я не связан с обработкой изображений и могу только предполагать.
Мои представления - изображение в памяти хранится и обрабатывается скорее как bitmap, развернутое/распакованное из jpg. Потери происходят при сжатии в jpg - при сохранении в файл. И между последовательностью "jpg > lossless формат > обработка > lossless формат" и "jpg > обработка > lossless формат" разницы нет. Попробую сформулировать - если между манипуляциями нет промежуточного сохранения в lossy формат, то потери качества не происходит.
Но повторюсь - это сугубо мое мнение, которое может быть ошибочным.
Автор: kost2005
Дата сообщения: 11.08.2013 02:20
Alex_Piggy Благодарю за ответ.
Если я Вас правильно понял - смысла ковертировать jpg в tif для того чтобы склеить - нет, потери будут в любом случае.
Так у меня ещё и "картинка" с разрешением 48280px x 21630px и итоговый(склеенный) tif получился больше 4 гигабайт, точнее не получился из-за ограничения размера tif в 4 гигабайта. Пришлось всё клеить в jpg, как итог файл 210MB.
Спасибо за помощь.
Автор: ASE_DAG
Дата сообщения: 13.08.2013 22:11
kost2005
> перед склейкой конвертнуть jpg в tif
Вопрос бессмысленный. Не нужно специальной литературы, чтобы узнать, что TIFF — это не формат сжатия, это контейнер. Сжаты изображения в TIFF’е могут быть тем же JPEG’ом, а могут LZW, а могут еще энным количеством алгоритмов.

Что порождает приказ вида
$ convert test.{jpg,tiff}

легко проверить
$ identify -format %C test.tiff
JPEG


Вот. Вывод о рациональности этого действия с т. з. сохранения качества, я полагаю, очевиден.
Автор: kost2005
Дата сообщения: 15.08.2013 00:37
ASE_DAG

Есть ещё вариант "-compress Lossless" при котором получается
$ identify -format %C test.tiff
none

Подскажите, пожалуйста, ещё такой вопрос - во что конвертнуть несколько jpg из которых потом нужно будет склеить изображение со стороной более 63000px, jpg соответственно не подходит. В каком формате оптимально хранить? И какой программой такие изображения просматривать?
Заранее спасибо.
Автор: Alex_Piggy
Дата сообщения: 15.08.2013 01:01
Доброе время
kost2005

Цитата:
Lossless refers to lossless JPEG, which is only available if the JPEG library has been patched to support it. Use of lossless JPEG is generally not recommended.

И, видимо, у Вас необходимые библиотеки отсутствуют и сжатие не происходит (compress : none).
Обычно для TIFF используют LZW. Можете попробовать ZIP. Все, кроме JPG - Lossless.
Но все-таки у меня вопрос - нужно ли конвертировать перед склейкой, если потеря качества происходит при сохранении после склейки (или любой другой операции) и только если формат, в который сохраняется, является Lossy?

ASE_DAG
Спасибо. Буду знать, что "по умолчанию" из JPG не перекодирует. Я пропустил, что The default is the compression type of the specified image file.
Автор: kost2005
Дата сообщения: 15.08.2013 01:28
Alex_Piggy, Здравствуйте.
Я конвертировал
convert.exe *.jpg +adjoin -compress Lossless -set filename:f "%t" "%[filename:f].tif"
в надежде, что с условием " -compress Lossless" последующая склейка полученных tif произойдёт без потерь в качестве.

Вот и я задаюсь тем же вопросом, какова должна быть последовательность действий, чтобы на выходе получить изображение либо без, либо с минимумом потерь в качестве?
Автор: Alex_Piggy
Дата сообщения: 15.08.2013 01:56
kost2005
Вам не нужна дополнительная операция/конвертация. Главное, чтобы формат, в который Вы сохраняете поддерживал сжатие без потерь.
Чем Вы склеиваете? И в какой формат?
Если при помощи ImageMagick в Tiff, то, например,
montage *.jpg -mode сoncatenate -tile 4x4 -compress LZW output.tif
ДОБАВЛЕНО:
К сожалению, или я или Вы не можем что-то понять.
У Вас результатом все равно станет один гигантский Tiff, который без сжатия (как у Вас случайно получилось) займет >4 Gb (с сжатием LZW - ~2-2,5 раза меньше). Просто не будут тратится ресурсы на неуместную конвертацию.
Автор: kost2005
Дата сообщения: 15.08.2013 02:17
Alex_Piggy, спасибо. Теперь всё понял.
А я идиЁт, сперва ковертировал в tif(-compress Lossless), а уж потом пытался склеить в один гигантский tif, что естественно не получалось из-за ограничения в 4 гигабайта.
Автор: king_stiven
Дата сообщения: 14.02.2014 11:04
convert 1jpg 1.wmv
Есть возможность выставить длительность wmv, частоту кадров?
Автор: ASE_DAG
Дата сообщения: 14.02.2014 12:32
king_stiven
Ну учитывая, что сабж не сам делает конвертацию, а, насколько мне известно, вызывает ffmpeg, то почему бы и нет:

$ ffmpeg -f image2 -framerate 2 -pattern_type sequence -start_number 1 -i %d.jpg 1.avi

на вход здесь подаются 1.jpg, 2.jpg, ...
Автор: king_stiven
Дата сообщения: 14.02.2014 13:04
Нашёл уже, что время выставляется -t секунд
для одного рисунка
ffmpeg.exe -loop 1 -i 1.jpg -t 6 1.wmv

Добавлено:
-framerate тоже работает, даже лучше, чем -t, размер выходного файла меньше.
Автор: diman777771
Дата сообщения: 01.03.2014 07:28
ImageMagick 6.8.8.8
Изменения:
Автор: ASE_DAG
Дата сообщения: 01.03.2014 15:57
diman777771, и каковы ваши личные впечатления?
Автор: Olleg35
Дата сообщения: 08.11.2015 22:06
Прошу помощи "небожителей", разбирающихся в компьютерных вопросах и владеющих английским . Меня очень заинтересовал BAT-файл для *качественного* уменьшения фотографий, что обсуждался на форуме http://forum.luminous-landscape.com/index.php?topic=91754.0 ("A free high quality resampling tool for ImageMagick users"). Я так понял (пользуясь переводчиком Google), что пользоваться им просто... захотелось его испытать, поиграться - но не удалось найти ссылки для скачивания ! То ли удалили, то ли требуется регистрация (что нереально). А восстановить сам скрипт по тексту (обсуждению) я тем более не в состоянии. Сам файл, возможно, назывался "Resample_by_Percentage_V122.bat".

Может кто-то из понимающих людей заинтересуется этим вопросом и приведет здесь или содержимое того файла, или ссылку на оригинал для скачивания???
Автор: ASE_DAG
Дата сообщения: 09.11.2015 09:17
Olleg35, да, нужна регистрация. Почему «нереально»? Вера не позволяет?

Добавлено:
Да бога ради, держите ссылку, если она вам чем-то поможет: http://forum.luminous-landscape.com/index.php?action=dlattach;topic=91754.0;attach=109821

Да и содержимое тоже:


Код: @ECHO OFF

REM Edit the codeline below to point to the location of the most recent version of
REM ImageMagick on your computer if the correct convert command is not recognized.
REM SET PATH=C:\Program Files\ImageMagick-6.8.9-Q16;%PATH%

ECHO *****************************************
ECHO ** IMAGE RESAMPLING **
ECHO *****************************************
ECHO * Halo minimization by Gamma blending, *
ECHO * as suggested by Nicolas Robidoux. *
ECHO * *
ECHO * Author : Bart van der Wolf *
ECHO * *
ECHO * Suggestions for code optimization: *
ECHO * Alan Gibson, Nicolas Robidoux, *
ECHO * Fred Weinhaus *
ECHO * *
ECHO * Version: 1.2.2 *
ECHO * Date : 2014.08.12 *
ECHO * *
ECHO * The Author(s) of this free tool shall *
ECHO * not be liable for any damages that *
ECHO * might result from the use of this *
ECHO * tool. Feel free to not use it. *
ECHO *****************************************

REM Ignore this for the moment, it's unfinished, for future support when dragging/dropping multiple files
REM FOR %%I IN (*.GIF *.JPG *.JPEG *.PNG *.TIF *.TIFF)
REM

:imsize
ECHO.
SET mSize="?"
ECHO Input the magnification percentage (e.g. 50%%), or fit
ECHO inside the requested pixel dimensions (e.g. 800x800,
SET /p mSize= or a max width 800x, or a max height x800):
IF %mSize% EQU "?" SET mSize=800x800
IF %mSize% EQU "" GOTO imsize

:method
ECHO.
SET UpDwn=d
SET /p UpDwn= Use an optimized Up- or Down-sampling method? [no][[/no]U]p, [no][[/no]D]own:
IF /i %UpDwn% GEQ d IF /i %UpDwn% LEQ down GOTO downsample
IF /i %UpDwn% GEQ u IF /i %UpDwn% LEQ up GOTO generic
GOTO method

:generic
SET deblurAmount=50
SET /p deblurAmount= Sharpening amount? (none=0, default/normal=50, high=100+):
for /f "usebackq" %%L in (`identify ^
-precision 16 -format "deblurValue=%%[no][[/no]fx:1-0.0011450938298236*%deblurAmount%]" ^
xc:`) do set %%L
REM IF /i %deblurAmount% EQU -1 GOTO generic

ECHO.
ECHO Creating the resampled image, please wait ...
convert ( -quiet "%~1" -type TrueColor -write "%~dp1IMsource.icc" -depth 16 -set colorspace sRGB -colorspace RGB ) ^
( -clone 0 -gamma 3 -define filter:blur=%deblurValue% -filter Lanczos -distort Resize %mSize% -gamma 0.3333333333333333 ) ^
( -clone 0 -define filter:blur=%deblurValue% -filter Lanczos -distort Resize %mSize% ) ^
-delete 0 ^
( -clone 1 -colorspace gray -auto-level ) ^
-compose over -composite ^
-set colorspace RGB -colorspace sRGB ^
-quality 100 -sampling-factor 4:4:4 ^
-profile "%~dp1IMsource.icc" -compress Lossless "%~dpn1_%mSize%%~x1"

REM Experimental
IF /i %deblurAmount% LEQ 0 GOTO addDeconv

GOTO finish

:downsample
SET sharpAmount="?"
SET /p sharpAmount= Sharpening amount? (none=0, normal=50+, default=100):
IF /i %sharpAmount% == 0 GOTO nodownsharp
IF %sharpAmount% EQU "?" SET sharpAmount=100
ECHO.
ECHO Creating the Down-sampled image with output sharpening, please wait ...
convert ( -quiet "%~1" -type TrueColor -write "%~dp1IMsource.icc" -depth 16 -set colorspace sRGB -colorspace RGB ^
-define filter:c=0.1601886205085204 -filter Cubic -distort Resize %mSize% ) ^
( -clone 0 -gamma 3 -define convolve:scale=^%sharpAmount%%%,100 ^
-morphology Convolve DoG:3,0,0.4981063336734057 -gamma 0.3333333333333333333 ) ^
( -clone 0 -define convolve:scale=^%sharpAmount%%%,100 ^
-morphology Convolve DoG:3,0,0.4806768770037563 ) ^
-delete 0 ^
( -clone 1 -colorspace gray -auto-level ) ^
-compose over -composite ^
-set colorspace RGB -colorspace sRGB ^
-quality 100 -sampling-factor 4:4:4 ^
-define png:preserve-iCCP ^
-profile "%~dp1IMsource.icc" -compress Lossless "%~dpn1_%mSize%%~x1"

REM Experimental
IF /i %sharpAmount% LEQ 0 GOTO addDeconv

GOTO finish

:nodownsharp
ECHO.
ECHO Creating the Down-sampled image without additional sharpening, please wait ...
convert ( -quiet "%~1" -type TrueColor -write "%~dp1IMsource.icc" -depth 16 -set colorspace sRGB -colorspace RGB ^
-filter Quadratic -distort Resize %mSize% ) ^
-set colorspace RGB -colorspace sRGB ^
-quality 100 -sampling-factor 4:4:4 ^
-profile "%~dp1IMsource.icc" -compress Lossless "%~dpn1_%mSize%%~x1"

REM Experimental
GOTO addDeconv

GOTO finish

REM *** DECONVOLUTION ***
:addDeconv
ECHO.
SET Deconv=n
SET /p Deconv= Apply additional deconvolution sharpening? [no][[/no]Y]es, or default [no][[/no]N]o:
IF /i %Deconv% GEQ y IF /i %Deconv% LEQ yes GOTO deconvolve
IF /i %Deconv% GEQ n IF /i %Deconv% LEQ no GOTO finish
GOTO addDeconv
:deconvolve
SET detailSize=0
SET /p detailSize= Blur size in pixels (e.g. blurred edge width, radius of blur):
IF /i %detailSize% LEQ 0 GOTO deconvolve
SET sharpAmount=50
SET /p sharpAmount= Sharpening amount? (none=0, default/normal=50, high=100+):
:noDeconvDialog
for /f "usebackq" %%L in (`identify ^
-precision 16 -format "blurSigma=%%[no][[/no]fx:max(0.4,0.3902*%detailSize%)]" ^
xc:`) do set %%L
ECHO.
ECHO Deconvolving the image, please wait ...
convert ( -quiet "%~dpn1_%mSize%%~x1" -type TrueColor -write "%~dp1IMsource.icc" -depth 16 -set colorspace sRGB -colorspace RGB ) ^
( -clone 0 -gamma 3 -define convolve:scale=^%sharpAmount%%%,100 ^
-morphology Convolve DoG:0,0,%blurSigma% -gamma 0.3333333333333333 ) ^
( -clone 0 -define convolve:scale=^%sharpAmount%%%,100 ^
-morphology Convolve DoG:0,0,%blurSigma% ) ^
-delete 0 ^
( -clone 1 -colorspace gray -auto-level ) ^
-compose over -composite ^
-set colorspace RGB -colorspace sRGB ^
-quality 100 -sampling-factor 4:4:4 ^
-profile "%~dp1IMsource.icc" -compress Lossless "%~dpn1_%mSize%%~x1"

GOTO finish

:finish
REM Clear environment variables
SET blurSigma=
SET deblurAmount=
SET deblurValue=
SET Deconv=
SET detailSize=
SET mSize=
SET sharpAmount=
SET UpDwn=
REM Delete temporary profile copy
IF EXIST "%~dp1IMsource.icc" DEL "%~dp1IMsource.icc"

ECHO.
ECHO *************************************
ECHO *** Your resampled file is Ready! ***
ECHO *************************************
ECHO.

PAUSE
Автор: Olleg35
Дата сообщения: 09.11.2015 20:42
ASE_DAG, *огромное спасибо*! Скопировал - работает, и отлично работает!!!

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

Страницы: 1

Предыдущая тема: Чем преобразовывать растр в ч/б 1бит


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.