GflSDK - библиотека от создателей XnView

Графические библиотеки, сами знаете, бывают разными. Есть такие, которые предназначены для обсчёта быстрой графики - например, OpenGL. Есть такие, которые позволяют вам строить в своих приложениях разные графики и диаграммы - к примеру, ZedGraph. Ну а есть библиотеки, которые помогают вам встроить в своё приложение поддержку множества форматов графических файлов - к ним как раз и относится GflSDK.


А нужна ли эта библиотека вам?

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

Форматов графических файлов сейчас существует великое множество. Большинство программ, которые не являются профессиональными средствами работы с графикой, довольствуется поддержкой десятка самых распространённых графических форматов вроде BMP, PNG, JPEG, GIF и иже с ними. Однако когда речь заходит о софте если не профессиональном, а хотя бы полупрофессиональном, то здесь уже, конечно, несколько другие стандарты и требования. Что я имею в виду? Я имею в виду пресловутую дилемму "80/20", которая говорит, что 80% пользователей программного продукта только на 20% используют его функциональность, но так как при этом функциональность каждому нужна разная, то её должно быть как можно больше. Очень интересная статья на эту тему есть у Джоэля Спольски (russian.joelonsoftware.com).

Так вот, о проблеме "80/20". На самом деле поддержка форматов файлов - это как раз одно из самых простых мест, где можно легко и изящно решить проблему с использованием сторонних библиотек. Кто может поручиться, что завтра вопрос о покупке тысячи копий вашей программы компанией Nokia не решится положительно благодаря поддержке её собственных графических форматов? Но ведь нельзя же уповать на случайность и убивать кучу времени на реализацию того, что неизвестно когда понадобится покупателям. Маркетинг учит нас, что это неправильно и даже опасно. Но совсем другое дело, если поддержка новых графических форматов не потребует от нас особых жертв в плане разработки. И вот тут-то на сцену выходит библиотека под названием GflSDK, способная дать вашему приложению поддержку такого количества графических форматов, что, как говорится, ни в сказке сказать, ни пером описать.

 


Знакомство с SDK

Как водится, для начала - о том, где можно найти эту всесторонне замечательную и безмерно прекрасную библиотеку. Сделать это можно по следующему адресу: www.xnview.com/en/gfl.html. Обратите внимание на домен. Да-да, эта библиотека действительно создана теми же людьми, которые написали широко известный просмотрщик XnView. Фактически, именно GflSDK и лежит в основе XnView, и у вас тоже есть возможность встроить мини-XnView в создаваемое вами приложение.

Надо сказать, что условия, на которых распространяется GflSDK, весьма лояльны. Библиотека совершенно бесплатна для некоммерческого использования, в том числе в учебных целях, программах, разрабатываемых некоммерческими организациями и т.д., и т.п. Если же в вас всё-таки говорят не высокие идеалы, а банальное желание заработать, то и в коммерческих целях никто вам эту библиотеку использовать не запрещает - только сначала её нужно будет купить (минимум, за сто евро - столько стоит облегчённая версия).

Что касается поддерживаемых платформ и языков программирования, то здесь всё довольно просто. Операционные системы, под которые можно разрабатывать приложения с помощью GflSDK, - это Windows, Linux, MacOS X, Irix, Solaris, FreeBSD, BeOS. Что касается Windows, то здесь можно использовать DLL-библиотеки, "обёртки" для которых есть на языках C++, Visual Basic, Delphi и Free Pascal. Есть также вариант использования ActiveX-компонента, но, наверное, это уже не слишком актуально для большинства разработчиков.

Если я сейчас начну вам перечислять все поддерживаемые GflSDK файловые форматы, то всё пространство, отведённое редактором под статью, окажется заполнено их списком. Чтобы оценить всю глубину возможностей этой библиотеки в плане количества поддерживаемых форматов, вполне достаточно будет привести значение их количества. Для чтения (импорта данных) оно составляет около ста форматов, для экспорта данных - около сорока. Полный список форматов можно найти по следующему адресу: www.xnview.com/en/formats.html. Конечно, читать его полностью вряд ли имеет смысл, но пролистать разок, пожалуй, стоит. Там вы найдёте даже очень экзотические форматы, в наше время, как правило, используемые для совместимости со старыми приложениями. Для поддержки некоторых форматов вам потребуются плагины, часть из них поддерживается только под Windows, а для PDF'а потребуется GhostScript. Но это всё, на самом-то деле, не такие уж и большие минусы, по сравнению с тем впечатляющим количеством файловых форматов, поддержку которых принесёт эта библиотека в ваше приложение.


Что, кроме форматов?

Хотя, безусловно, поддержка такого количества форматов сама по себе впечатляет, именно ради неё и затевалась вся эта библиотека, GflSDK может предложить разработчикам ещё кое-что сверх этого.

Во-первых, GflSDK поддерживает конверсию палитры изображений, изменение яркости, контраста и прочих параметров изображения. Вполне логично, что этот список возможностей продолжают простые эффекты вроде размывания изображения (blur'а) и прочих подобных вещей. Думаю, не стоит говорить о поддержке масштабирования, поворотов изображений, их зеркального отражения - это всё как бы само собой разумеется. Конечно, нельзя сказать, чтобы все эти функции были сильно необходимы, но, думаю, если уж ваше приложение работает с графикой, то пользователь должен иметь хотя бы какие-то минимальные возможности её редактирования. Даже если он просто загружает картинки в базу данных, всё равно ему может понадобиться их масштабировать, повернуть или зеркально отразить. А потому то, что разработчики не поленились снабдить GflSDK подобной функциональностью, - это очень неплохо.

Что касается другой функциональности, также относящейся к работе с файлами изображений, но уже не к самим картинкам, - это чтение EXIF-информации без загрузки самой картинки, а также чтение и запись IPTC-информации.

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


GflSDK vs. FreeImage

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

Поскольку рассказывал я о FreeImage действительно давно, напомню кое-что о ней. Сайт этого программного продукта располагается по адресу freeimage.sourceforge.net. Эта библиотека полностью бесплатная (и свободная - уточняю для тех, у кого аллергия на слово "бесплатный"), но при этом распространяется как на условиях GNU GPL (для некоммерческого использования), так и под собственной лицензией (для коммерческого использования).

Конечно, FreeImage не может похвастаться поддержкой такого большого числа форматов, и в этом плане, несомненно, GflSDK имеет более сильные позиции. В арсенале FreeImage порядка трёх десятков форматов - в три с лишним раза меньше, чем в арсенале GflSDK. С другой стороны, всё-таки бесплатность есть бесплатность, и с этим не поспоришь - в плане цены FreeImage выглядит привлекательнее, чем GflSDK, самая урезанная версия которой стоит сотню евро. Ещё один плюс FreeImage - более широкая поддержка метаданных. Если в GflSDK поддерживаются только EXIF и IPTC, то в FreeImage ещё есть возможность работы с Adobe XMP и GeoTIFF. В плане поддержки операционных систем кому бы то ни было пальму первенства отдать сложно - разве что, если вам нужно портировать библиотеку под какую-нибудь экзотику вроде QNX, с FreeImage будет проще, потому что у неё открытый исходный код. "Обёрток" для разных языков программирования у FreeImage тоже больше: Delphi, Visual Basic, C# и VB.NET. В плане разных эффектов и возможности трансформации изображений обе библиотеки, в принципе, примерно на равных позициях.

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


Выводы (Резюме)

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

Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by

Версия для печатиВерсия для печати

Номер: 

16 за 2009 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!