LINUX.ORG.RU

GraphicsMagick — альтернатива ImageMagick


1

0

Долгие годы ImageMagick был основным средством пакетной обработки изображений. Некоторое время назад появился "fork" проекта -- GraphicsMagick.

На сайте перечислены многочисленные изменения и улучшения, внесённые в оригинальный код ImageMagick. В числе прочего: несколько утилит объединены в одну (gm), исправлены опасные ошибки чтения изображений, улучшена поддержка разных глубин цвета и цветовых профилей, повышена производительность ряда операций.

Одна из целей проекта -- сохранение стабильного API. Это означает, что ваш код, использующий GraphicsMagick, будет давать одинаковые результаты по мере изменений в GraphicsMagick. Увы, этого очень не хватало в ImageMagick, где смысл отдельных функций совершенно изменялся даже при изменении во второй-третьей цифре версии.

>>> Сайт проекта

Deleted

Проверено: svyatogor ()
Ответ на: комментарий от logIN

> Чем не устраивает тот же convert, но в виде бинарика, а не либы? Даже с точки зрения программирования, это - лишнее.

а как вы думаете есть разница, одна утилитка или 10? при том, что они пользуют одну и ту-же либу и дают одну и ту-же функциональность.

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

ananas ★★★★★
()
Ответ на: комментарий от logIN

> Если завтра питерский дворник "just for fun" добела отмоет весь урюпенск, я ему что, в ноги кланятся должен? Наоборот, я подумаю - идиот, мне то что с этого? Не всякий труд может/должен быть оценен.

Хм. Скажите почему? Я вот не могу понять одного. У Вас что завышенное самомнение? Все должны Вам кланятся? Или что?

А почему бы просто не сказать ему за это спасибо? Вы ведь этого делать не стали, хотя живете в урюпинске... :)

Vertelkins
()
Ответ на: комментарий от logIN

> Если завтра питерский дворник "just for fun" добела отмоет весь урюпенск, я ему что, в ноги кланятся должен? Наоборот, я подумаю - идиот, мне то что с этого?

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

ananas ★★★★★
()
Ответ на: комментарий от valeri_ufo

>юникс way и что совсем не юникс way иметь один бинарник на всё

Я тебе повторю принципы UNIX-way: Каждая програма должна быть настолько мала, насколько это возможно. Каждая такая програма должна выполнять минимальный набор функций, но не меньше и не больше. Каждая програма должна выполнять свою маленькую задачу максимально хорошо.

UNIX-way или не UNIX-way определяется в зависимости от задачи, в GM принципы UNIX-way НАРУШЕНЫ! Вовсе не обязательно создавать програму "gm", которая будет вызывать еще что-то, а потом еще.. и еще.. и в итоге sig11.

Да, с точки зрения внутренностей - busybox не UNIX-way, с точки зрения end-user'a это UNIX-way. Видишь? Если busybox приспичило быть одним бинарём - so be it, им это надо. Но если этого делать не нужно, как в случае с GM - то и НЕ НАДО этого делать.

logIN
()
Ответ на: комментарий от ananas

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

А причем тут они, я и урюпенск? Причем тут вообще я? Откуда моему "спасибо" браться? Извините, я не для партии живу, и не партии благодарность выношу. Мне понравилось - спасибо, но за урюпчан я спасибы говорить не буду.

logIN
()
Ответ на: комментарий от logIN

> Я тебе повторю принципы UNIX-way: Каждая програма должна быть настолько мала, насколько это возможно. Каждая такая програма должна выполнять минимальный набор функций, но не меньше и не больше. Каждая програма должна выполнять свою маленькую задачу максимально хорошо.

это все завист от уровня абстракции. задача - "разнообразные манипуляции с изображениями". тулза - gm. полностью подпадает под приведенное вами определение. или вы там обнаружили недокументированые фичи "отсосать с проглотом" и "нарезать колбаски на бутерброды" :))?

ananas ★★★★★
()
Ответ на: комментарий от logIN

> А смысл?! Чем не устраивает тот же convert, но в виде бинарика, а не либы? Даже с точки зрения программирования, это - лишнее.

Объясняю с позиции программирования - либы лучше, чем экзешник. При работе с бинарником, надо делать системный вызов fork, затем wait, а опосля, если все прошло нормально - брать результат. Все это работает, но только медленно.

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

Утилиты - удобней для скриптов (bash, perl, python, etc), библиотеки для "языков" (C, C++, fortran). У каждой есть свое применение и своя ниша.

Опять же если ты такой фэн юникс-вея, ты читал книгу Ю.Вакхалия "Юникс изнутри"? Так там куча всего интересного написана и про юникс-вей тоже. :)

Vertelkins
()
Ответ на: комментарий от logIN

как end-user я могу сказать GM настолько мал (сам бинарник) насколько возможно и выполняет программа задачю максимально хорошо, используя для для её задачи нужную библиотеку, вот, получаем занимает мало место и делает хорошо что должна делать. unix way и зачем она что то будет вызывать, нет вовсе не что то а библиотеки по запрошенной функции вызовет

valeri_ufo
()
Ответ на: комментарий от logIN

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

ananas ★★★★★
()
Ответ на: комментарий от valeri_ufo

я ее два раза прочитал. просто супер! :) почаще бы так "Питер" нас радовал!!! :)

Vertelkins
()
Ответ на: комментарий от valeri_ufo

>Теперь через либу - выделяешь память, кормишь ее функции,
>выполняешь - все. Все работает в одном процессе и не надо
>парится с запуском и ожиданием процесса. Работа просто гибче получается.

Скажи где больше fork'ов и exec'ов будет.

for x in /path/*.png; do convert "$x" "$x now.jpg"; done
или
for x in /path/*.png; do gm convert "$x" "$x now.jpg"; done

Я вижу, что в обоих случаях равное число. А где больше if'ов? Да! В GM! А лишний dlopen(+open+read+еще куча функций динамического линкера)?

Но всё это мелочи...

>как end-user я могу сказать GM настолько мал (сам бинарник)
>насколько возможно и выполняет программа задачю максимально хорошо,

Причем тут размер бинарика? Очнись! Я говорю про программу, о ее функциях. Смотря на IM, я вижу, что GM можно разбить (обратно :-) без потерь ни в удобстве, ни в производительности. То что эти утилиты склеили - ошибка, большая.

logIN
()
Ответ на: комментарий от logIN

очнулся и сразу цитирую "Каждая програма должна быть настолько мала, насколько это возможно." с словом мало ты имел ввиду разве не размер ? или ты ищещ к чему бы прикопаться и сказать что вдруг с размером ты не имел ввиду размер программы

valeri_ufo
()
Ответ на: комментарий от logIN

Мдя... Ты читать умеешь? Помоему тока по диагонали и то начиная с конца. Ты описал простой скрипт, а не кусок кода на сях привел. А в этом скрипте, на каждый запуск convert у тебя будет форк. Только сделает его шелл... :)

> Я вижу, что в обоих случаях равное число. А где больше if'ов? Да! В GM! А лишний dlopen(+open+read+еще куча функций динамического линкера)?

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

Изменить это можно только в самом convert'е. Если у него есть пакетная обработка файлов, т.е. convert *.png *jpg. Произойдет один запуск программы и все файлы будут обработаны. Думать надо головой, а не юникс-веем. :)

Vertelkins
()
Ответ на: комментарий от valeri_ufo

>или ты ищещ к чему бы прикопаться
>и сказать что вдруг с размером ты не имел ввиду размер программы

Нет, не ищу. Конечно, размер програмы тоже имеет значение. Если бинарь в 300 метров пишет "hello world" - это не нормально. Однако, _только_ размер бинарика не говорит о его нарушении или полном соответствии UNIX-way. В UNIX'e все должно быть гармонично. :-)

logIN
()
Ответ на: комментарий от Vertelkins

>Ты описал простой скрипт, а не кусок кода на сях привел.
>А в этом скрипте, на каждый запуск convert у тебя будет форк. Только сделает его шелл... :)

У тебя есть другие способы запуска convert'a? Или из C-проги, оно будет запускатся как-то по особому, без fork'a? Или ты IM/GM в виде библиотеки использовать хочешь?

Ты вообще читал API-доки IM? Для Си (и С++ и перл, кстати) там с самого начала все вынесено в библиотеку. А я тебе говорю про утилиту!

Если ты используешь convert как утилиту - GM вносит дополнительные и не нужные обёртки. Если ты говоришь о использовании IM из С/С++ - то в этом смысле IM и GM ничем не отличаются (только пресловутой совместимостью).

logIN
()
Ответ на: комментарий от logIN

2logIN

Тебе уже задали вопрос про iptables. Ась?

Что касаемо gm import vs import... Как минимум, не будет конфликта при установке пакетов. Плюс удобство MAN - в одном месте описаны все поддерживаемые команды. Так что gm - unix way однозначно.

ANDI ★★
()
Ответ на: комментарий от ANDI

>Тебе уже задали вопрос про iptables. Ась?

Бред писали про iptables.

>Плюс удобство MAN - в одном месте описаны все поддерживаемые команды.

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

logIN
()
Ответ на: комментарий от valeri_ufo

>у линукс есть одна проблема imho это психозная фанатическая коммюнити, всмысле явно не все такие но много таких "фанатиков" и это оооччеенььь ненапользу линуксу

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

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

MiracleMan ★★★★★
()
Ответ на: комментарий от logIN

для тебя имеет значение лишь внешнее представление или реализация самого механизма?

MiracleMan ★★★★★
()
Ответ на: комментарий от drish

>UNIX-way - удел недалёких фанатиков.

Юникс или не юникс вый, не важно. Когда впервые прозвучала эта фраза в треде, аргументы были вполне понятными. Накуя надо писать много слов вместо одного?

anonymous
()
Ответ на: комментарий от logIN

Смотрел я эти 10 книжек, где 90% информации общей. Бред.
А вот реальная задача - ну не помню я, как называется команда, соединяющая 10 изображений в одно, и что мне делать? А тут - man gm.

>>Тебе уже задали вопрос про iptables. Ась?
>Бред писали про iptables.

В общем, мы тебя поняли.

ANDI ★★
()
Ответ на: комментарий от logIN

Я тебе уже в предыдущих постах ответил на этот вопрос. Ты наезжаешь на все и на утилиту и на либы.

> Если ты говоришь о использовании IM из С/С++ - то в этом смысле IM и GM ничем не отличаются (только пресловутой совместимостью). А чем тебе не нравится совместимость? Если есть грамотно построенная либа, у которой продуман интерфейс, то изменения будут касатся только внутренних механизмов. Ну а если тебе нужно функционал новый, то обычно это грозит переписыванием кода практически с нуля. И идем к "dependens hell". Потому как прога написанная под оперделенную версию IM - не будет работать с новой и результат переписывание проги заново. Проще написать новую либу, оставив старую в покое, в которой будет новый функционал. Кому надо - тот будет юзать новые фичи, все остальные - старые. Это помоему нормально - возьми posix - все вызовы стандартизованы, и все нормально, все пользуются и все довольны. Почему такое нельзя реализовать в IM, а в GM - реализовали?

Vertelkins
()
Ответ на: комментарий от valeri_ufo

> а так я открою htop как и обчыно и убью всё что мне нужно

да ты что! все пятьдесят поочереди? а killall не проще ли будет?

anonymous
()
Ответ на: комментарий от logIN

>Если завтра питерский дворник "just for fun" добела отмоет весь урюпенск, я ему что, в ноги кланятся должен? Наоборот, я подумаю - идиот, мне то что с этого?

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

MiracleMan ★★★★★
()
Ответ на: комментарий от logIN

Ты слишком глубоко погружен в юникс-вей... нужно иногда и здраво рассуждать.

godexsoft
()
Ответ на: комментарий от ANDI

>для тебя имеет значение лишь внешнее представление или реализация самого механизма?

И то и другое. Если все хорошо, то почему бы и нет?

В случае с GM, его монолитность, для меня, перечеркивает все его "прелести". А "прелестей" особых нету. Все что есть в GM вскоре будет и в IM (заисключением монолитности, надеюсь).


>А вот реальная задача - ну не помню я, как называется команда,
> соединяющая 10 изображений в одно, и что мне делать? А тут - man gm.

А man everything тебе не нужно? Не поминиш кто ты и где ты.. а тут раз! И вспомнил.. :-)


>Я тебе уже в предыдущих постах ответил на этот вопрос.
>Ты наезжаешь на все и на утилиту и на либы.

На утилиты, потому что монолит.
На либы я пока не наезжал. Если совместимость будет слишком далекой, можно будет "наехать" и на либы. А тенденция такой совместимости виднеется.

>Это помоему нормально - возьми posix - все вызовы стандартизованы,
>и все нормально, все пользуются и все довольны.

А номера посиксов для чего? Ты думаешь там всё веками совместимо? Нет, они тоже изменяются, в лучшую сторону. Вспомни, новые coreutils, они больше не воспринимают tail/head -N, где N - цифра. Теперь нужно tail/head -nN. Видишь, поменяли POSIX, поменялись утилы. Также и с либами. В POSIX'е есть откровенные баги, о которых часто пишут в man'ах в разделе NOTES/RESTRICTIONS/BUGS.

Если разработчики меняют API в IM - значит улучшают (ну не ухуджают ведь?). А значит GM позади, или на ровне, но с хламом за бортом.

logIN
()
Ответ на: комментарий от logIN

да, твоя позиция ясна.. ;-)) у тебя есть своё мнение и ты пытаешься донести его до окружающих.. но и у других есть свои мнения, претендующие на правоту не менее твоего..

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

MiracleMan ★★★★★
()

ребята, вы со шмалью завязывайте тут. хотя она у вас и первый сорт :)))
в качестве еще одной темы для спора предлагаю обсудить формат ключиков к командам. имеем 4 варианта: --long-key -long -l l. какой из них unix-way а какие - происки билла?

HellAngel ★★
()
Ответ на: комментарий от Vertelkins

>Изменить это можно только в самом convert'е. Если у него >есть пакетная обработка файлов, т.е. convert *.png *jpg. >Произойдет один запуск программы и все файлы будут >обработаны. Думать надо головой, а не юникс-веем. :) ламер вы батенька. что ж в mv (или там cp) не придумали такую фичу, mv *.htm *.html ? я тебе скажу почему: шелл оба вилдкарда раскроет. ну, мозги шевелится начали? и, вобщем случае пакетная обработка точно не юнихвей. прога должна ТОЛЬКО кодировать wav в mp3, но делать это хорошо. файлы проге подавать (и обрабатывать возможно нетривиальные _списки_ файлов) - должен шелл. и т.д. ты если каждый форк начнешь считать - так выкинь все свои скрипты, включая /etc/rc.d/init.d и перепиши их на C. а лучше на C++, там со стрингами удобнее работать. хотя в bash все равно удобней: grep+sed+awk; тебя ж не волнует что по форку на каждый греп?

anonymous
()
Ответ на: комментарий от godexsoft

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

MiracleMan ★★★★★
()
Ответ на: комментарий от logIN

>>что ж в mv (или там cp) не придумали такую фичу, mv *.htm >>*.html ? >man rename :-) >rename .htm .html *.htm

вот именно! какое отношение rename имеет к mv? а rename *.htm это файлы _на_вход_, не бывает rename *.htm *.html. (то есть бывает ;-) но с другой семантикой)

anonymous
()
Ответ на: комментарий от drish

>> что ж в mv (или там cp) не придумали такую фичу, mv *.htm *.html ?
>Придумали :) mv -f *.htm *.html /home/user/documents

Шутка юмора? твоя команда переместит .htm и .html файлы в /home/user/documents. А если я не ошибаюсь, требовалось переименовать из .htm в .html.

logIN
()
Ответ на: комментарий от logIN

Мой вариант:

zmv -W \*.htm \*.html
или даже так
mmv *.htm *.html

И оба работают ;)

aLeX
()
Ответ на: комментарий от anonymous

отнюдь не проще когда нада убить много разных процессов, я тебе буду копать какой pid имеет процесс и потом убивать, если я имени незнаю, а в htop выделил процессы которые убить надо и радуйся

valeri_ufo
()
Ответ на: комментарий от logIN

>Общая тенденция такая - неуважение к UNIX-way. Истоки берет у Windows'a.

Хех. Если бы UNIX-way был во-первых, дядей, во-вторых, самых честных правил, и, в-третьих, заставил-таки себя уважать, то можно было бы и посокрушаться о каких-то там тенденциях. Но UNIX-way (по крайней мере для меня) -- это исключительно инструмент, как и Windows-way, и я буду пользоваться им тогда и только тогда, когда мне будет это удобно. Таким образом, я не вижу причин для истерик и обожествления того или иного подхода. Вы же, надеюсь, плоскогубцам не поклоняетесь, правда?

dsx
()

А не посоветуют ли мне благородные доны как закапчурить окно (например мозиллы) через import в бэкграунде серверного процесса?
Пробовал всяко, но так и пришлось xvfb использовать. А ведь import как-раз это должен уметь и об етом пишут.
И почему он висит, не выходит из
import -window root out.png
(только когда мышой тыкаешь - получается, а мне-же надо - автоматом)

Anode
()
Ответ на: комментарий от logIN

Насколько я понял, там не идет речь об одном ЖИРНОМ gm, который реализует все функции программы, а НЕБОЛЬШОМ gm, реализованного по типу gcc.

Ведь сам gcc на самом деле вовсе не умеет компилировать ни один из языков, а всего лишь пускает для этого необходимую программку из libexec-а

scout_sv
()
Ответ на: комментарий от DronK

Я по поводу другой темы, написанной о фортране где-то в 2002г. Меня интересует программа Modtran. Если есть возможность ответьте по емайл doctorwovxu@pochta.ru (очень хотелось бы где нибудь ее скачать)!!!

anonymous
()
Ответ на: комментарий от DronK

Я по поводу другой темы, написанной о фортране где-то в 2002г. Меня интересует программа Modtran. Если есть возможность ответьте по емайл doctorwovxu@pochta.ru (очень хотелось бы где нибудь ее скачать)!!!

anonymous
()
Ответ на: комментарий от DronK

Я по поводу другой темы, написанной о фортране где-то в 2002г. Меня интересует программа Modtran. Если есть возможность ответьте по емайл doctorwovxu@pochta.ru (очень хотелось бы где нибудь ее скачать)!!!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.