LINUX.ORG.RU

Simple Viewer GL - вьювер изображений

 , ,


2

1

Когда-то давно я не смог найти для себя вьювер, который удовлетворял моим требованиям. Посему был написан свой вьювер - simple viewer, базирующийся на GFL SDK (используется в xnview).

Через некоторое время я решил отказаться от GFL SDK в пользу открытых библиотек (libjpeg, libtiff, giflib, libpng, etc.) и перешел на OpenGL. Так 8 лет назад родился Simple Viewer GL: https://bitbucket.org/andreyu/simple-viewer-gl

Картинка для привлечения внимания: https://bitbucket.org/repo/XgobE8/images/1203610096-simpleviewergl.png

Поддерживается все, что умеет ImLib2 (BMP, TARGA, куча прочих форматов), а так же:

  • PNG (libpng),
  • JPEG (libjpeg),
  • TIFF (libtiff),
  • GIF (giflib),
  • PPM (частичная поддержка),
  • DDS (частично),
  • PSD (формат до конца не отреверсили, посему не все фичи поддерживаются),
  • ICO (png и «обычные» фреймы),
  • XWD (только x11, за реализацию x10 даже не брался),
  • SCR (ZX-Spectrum screen),
  • PVR, RAW, AGE (это внутренние форматы).

Интерфейс - одно окно с опциональной строкой статуса и информацией о пикселе/селекшене под курсором.
Вьювер умеет определять тип файла по его сигнатуре, а не только по расширению.
Умеет рекурсивно сканировать директорию.

Работает под Linux и macOS. Вместо мертвого freeglut используется glfw3.

Сегодня собрался с силами и смержился с development.
Постараюсь ответить на все ваши вопросы по вьюверу.

Перемещено beastie из talks

★★★★★

Последнее исправление: andreyu (всего исправлений: 1)

не нашел готового билда, при попытке собрать

$ make release
cd .build ; cmake .. -DCMAKE_CXX_FLAGS='-Wall -Wextra -O2' ; make ; cd ..
/bin/sh: cmake: command not found
make[1]: *** No targets specified and no makefile found.  Stop.
cp .build/sviewgl .
cp: .build/sviewgl: No such file or directory
make: *** [release] Error 1

может есть бинари где-то?

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

или настрой авто-сборку на travis-ci.org, и заливай бинари оттуда после каждого зеленого билда.

Точно, давно хотел сделать, да не знал с чего начать.

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

Непонятно, как подключить bitbucket, а не только github.

Отвечаю сам себе - никак, у них нет планов поддерживать bitbucket.

andreyu ★★★★★
() автор топика
Последнее исправление: andreyu (всего исправлений: 1)
Ответ на: комментарий от andreyu

Даже и не знаю, а какую стоит использовать?

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

Еще лицензия нужна хотя бы потому, что наверняка захотят форкнуть, чтобы добавить svg, например.

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

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

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

Возможно, они уже устарели, надо проверять.

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

никак, у них нет планов поддерживать bitbucket

кстати, разве должно быть не наоборот — поддержка travis-ci со стороны bb? хуки ведь на стороне bb должны быть реализованы...

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

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

В корне лежит файл с GPLv2, пусть она и остается в качестве основной лицензии.

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

попытка запуска выглядит вот так...

Это очевидно, ведь требуемых библиотек в системе нет. Не линковать же мне их статически.

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

кстати, разве должно быть не наоборот — поддержка travis-ci со стороны bb? хуки ведь на стороне bb должны быть реализованы...

Возможно и так.

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

Это очевидно, ведь требуемых библиотек в системе нет. Не линковать же мне их статически.

ни в коем случае. просто сделай app bundle, и закинь *.dylib в Contents/Resources.

edit: app bundle еще нужен, чтобы в Info.plist прописать file type associations

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

и в коем случае. просто сделай app bundle, и закинь *.dylib в Contents/Resources.

Для этого нужно собирать app bundle, а я хотел удобную консольную версию.

edit: app bundle еще нужен, чтобы в Info.plist прописать file type associations

Возможно придет время и я созрею до такой реализации. Сейчас же мой кейс таков - из midnight commander тапнуть кнопке enter на интересующем меня файле. Или из консоли выполнить команду sviewgl -a -r /path/to/ для рекурсивного сканирования и просмотра содержимого.

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

Знаю, что cmake правилом MACOSX_BUNDLE можно легко создать app bundle, но не знаю, как указать список либ, для добавления в бандл.
С ходу у меня получилось только бандл собрать, но либ там нет.

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

Для этого нужно собирать app bundle, а я хотел удобную консольную версию.

удобную консольную версию никто не запрещает запускать прямо оттудова из app bundle (она и будет там лежать в Contents/MacOS)

Сейчас же мой кейс таков - из midnight commander тапнуть кнопке enter на интересующем меня файле. Или из консоли выполнить команду sviewgl -a -r /path/to/ для рекурсивного сканирования и просмотра содержимого.

ну это потому что ты не эпплофан. а эпплофаны не пользуются MC, и картинки из консоли редко открывают, да и то командой open.

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

С ходу у меня получилось только бандл собрать, но либ там нет.

сорри, тут ничего не подскажу, я про cmake знаю только то, что он ужасен, и я не хочу ничего про него знать.

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

ну это потому что ты не эпплофан. а эпплофаны не пользуются MC, и картинки из консоли редко открывают, да и то командой open.

А фразой «писал вьювер для себя» я как бы намекнул, что писал вьювер для себя.

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

сорри, тут ничего не подскажу, я про cmake знаю только то, что он ужасен, и я не хочу ничего про него знать.

Это да, страшен как смерть. Но я не знаю ничего лучше, если не считать premake.

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

А фразой «писал вьювер для себя» я как бы намекнул, что писал вьювер для себя.

не вопрос, я не пытаюсь тебя к чему либо принуждать. просто в таком виде его даже не посмотреть. слишком канонично опенсорсный подход — вот вам исходники, что хотите то и делайте, УМВР. не хотите компилировать? ждите ебилдов/дебов/рпмов. ах у вас макось?! эпплофан!

Но я не знаю ничего лучше, если не считать premake.

если нужно кроссплатформенно, то может и так, не интересовался.

в моем случае кроссплатформенность системы сборки не нужна, зато нужно удобство, поэтому использую xcode/xcodebuild.

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

ах у вас макось?! эпплофан!

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

в моем случае кроссплатформенность системы сборки не нужна, зато нужно удобство, поэтому использую xcode/xcodebuild.

Как хакодовский проект поможет собрать приложение, которое зависит от библиотек не входящих в macOS SDK?

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

Как хакодовский проект поможет собрать приложение, которое зависит от библиотек не входящих в macOS SDK?

Включением всех нужных библиотек в проект. (Можно даже предварительно собранных вне хакода)

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

Включением всех нужных библиотек в проект. (Можно даже предварительно собранных вне хакода)

Как submodule?

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

Да как угодно... у меня все зависимости в отдельном git submodule, но в том же самом xcodeproj (1 проект на все)

waker ★★★★★
()

Предлагаю сделать первый релиз текущего мастера в sviewgl-2.7.tar.gz (тем более версия уже далеко не 0.1.6532) и разместить его в Downloads, с обязательным включением файлика LICENSE. Спасибо.

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

Предлагаю сделать первый релиз текущего мастера в sviewgl-2.7.tar.gz (тем более версия уже далеко не 0.1.6532) и разместить его в Downloads, с обязательным включением файлика LICENSE. Спасибо.

Речь о срезе сорцов или бинарнике?

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

В Wayland умеет?

Если glfw3 умеет в wayland, то и вьювер должен будет суметь в него.

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

Срез сорцов, для пакетирования. На эту версию будут ссылаться пакеты разных дистров.

А вариант с тегом не подойдет?
https://bitbucket.org/andreyu/simple-viewer-gl/downloads?tab=tags
Там есть линки на zip, gz, bz2 нужной версии:
https://bitbucket.org/andreyu/simple-viewer-gl/get/v2.7.tar.bz2

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

Вы используете дистрибутив Void?

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

Void

Да.

А вариант с тегом не подойдет?

Для пакетов желательно версия, если не хотите версию, то можно делать _git пакет с датой или тегом, но если есть версия (2.70), она ведь указывается при запуске приложения, то зачем выдумывать, а не релизнуть её же. Она ведь уже есть и работает.

Там есть линки на zip, gz, bz2 нужной версии:

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

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

Void

Да.

Там свой менеджер пакетов, но при этом используются ebuild?

Для пакетов желательно версия, если не хотите версию, то можно делать _git пакет с датой или тегом, но если есть версия (2.70), она ведь указывается при запуске приложения, то зачем выдумывать, а не релизнуть её же. Она ведь уже есть и работает.

Так тег как раз и указывает на определенный коммит. Устанавливая тег, разработчик как бы фиксирует в гите срез в строго определенном состоянии.

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

В гите тег - это альяс на хеш коммита. Если разработчик пересоздаст некий тег на другой коммит, то значит разработчик ССЗБ. Я не знаю тех, кто так делает. Во всяком случае, я такого делать не буду.

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

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

Я не знаю простого способа создать архив на основе какого-либа коммита.

в автотулсах это делается командой make dist (или make distcheck для полной уверенности в работоспособности архива).

правда, сомневаюсь, что в cmake есть подобная фича.

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

Там свой менеджер пакетов, но при этом используются ebuild?

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

Так тег как раз и указывает на определенный коммит. Устанавливая тег, разработчик как бы фиксирует в гите срез в строго определенном состоянии.

ну тогда нет проблем, называю пакет 2.70 с ссылкой на соотв. тег. Спасибо.

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

в автотулсах это делается командой make dist (или make distcheck для полной уверенности в работоспособности архива).

Это не спасет меня от необходимости выгружать этот архив в bitbucket руками.

Хотелось бы хитрожелтую кнопку «создать архивы на основе среза и назвать их так».

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

Нет, там темплейты, ебилд я просто сделал когда сидел на рабочей станции с гентой.

Похоже, что вы не понаслышке знакомы с Void и Gentoo. Можно ваши впечатления о Void относительно Gentoo?

ну тогда нет проблем, называю пакет 2.70 с ссылкой на соотв. тег. Спасибо.

Супер, спасибо вам.

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

Это не спасет меня от необходимости выгружать этот архив в bitbucket руками.

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

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

впечатления о Void относительно Gentoo?

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

Весь дистр (включая пакеты) находится на гитхабе, захотел форкнул — и делаешь что хочешь, поддерживаешь сам. Простая, но удобная система инициализации runit, сервисы создавать/запускать элементарно. Темплейты похожи на ебилды, но проще.

Самобытный (начиная от менеджера пакетов, заканчивая системой инициализации) дистр, сообщество не очень большое, но отзывчивое.

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

http://voidlinux.eu

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

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

Я понимаю, что для автоматизации нужно использовать автоматизацию.

у меня генерацией тарболлов и выгрузкой на файл хостинг занимается travis-ci.

Мы уже об этом говорили.

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

Официальный сайт я уже видел. А за впечатления о дистрибутиве большое спасибо.

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

Мы уже об этом говорили.
Это не спасет меня от необходимости выгружать этот архив в bitbucket руками.

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

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

я ответил, что тебя спасет.

Как автотулзы, собирающие архив спасут меня от выгрузки этого архива в bitbucket?

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

Использование гитхаба, travis и автотулсов решают эту проблему.

А когда понадобится еще какая-либо фича, то будет предложено перейти на еще_один_вариант_гит_хостинга?

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

А когда понадобится еще какая-либо фича, то будет предложено перейти на еще_один_вариант_гит_хостинга?

если бы тебе нужен был только гит хостинг, переход на другой делается 1 командой git push.

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

можно перейти на современную развитую платформу, а можно продолжать страдать.

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