LINUX.ORG.RU

Simple Viewer GL 2.75

 , ,


3

5

Simple Viewer GL — легковесный просмотрщик изображений.

Интерфейс состоит из одного окна с опциональной строкой статуса и информацией о пикселе под курсором и/или выделенной области (скриншот). Simple Viewer GL умеет определять тип файла по его сигнатуре, а не только по расширению, а также рекурсивно сканировать директорию.

Работает в GNU/Linux и macOS.

Новое в 2.75

  • Добавлена поддержка формата XPM (собственная реализация).
  • Добавлена поддержка формата TARGA (собственная реализация).
  • Убрана зависимость от библиотеки libconfig++ в пользу ini-подобного конфигурационного файла.
  • Улучшена поддержка форматов DDS, ICO и XWD.
  • Обновлена палитра ZX-Spectrum (теперь это PULSAR, как на «железном» ZX).
  • Добавлена возможность сохранять зум (переключается по хоткею <shift>+<s>).
  • Исправлена ошибка с фильтрацией текстур.
  • Улучшено сканирование директории, поддержка перетаскивания списка файлов.

Поддерживаемые форматы

Сторонняя реализация:

  • PNG (libpng);
  • JPEG (libjpeg);
  • TIFF (libtiff);
  • GIF (giflib);
  • WEBP (webp).

Собственная реализация:

  • PPM (24 raw и 24 ASCII);
  • XPM (только xpm 2);
  • TARGA;
  • DDS (частично);
  • PSD (формат до конца не отреверсили, посему не все функции поддерживаются);
  • ICO (png и «обычные» фреймы);
  • XWD (только x11);
  • SCR (ZX-Spectrum screen);
  • PVR, RAW, AGE (это внутренние форматы).

>>> Simple Viewer GL на BitBucket

★★★★★

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

Дайте DEВ'ы для Trusty 14.04!

Я не умею. Но буду рад, если кто-то поможет.

deb пока не собрал, но под сузю-федору кое-как. надо будет дописать зависимости нормально. в любом случае - лови. попробую сегодня сделать для дебов и шапки-центоси

https://build.opensuse.org/package/show/home:upcFrost:random/sviewgl

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

Раньше не обращал внимания. Но да, на макбуке с ретиной это просто не так заметно. Фильтрация включена, а ступеньки при таком зуме есть.

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

В смысле? Листать кадры GIFа? Полезная фича, чтобы GIMP не запускать.

Именно так.

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

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

Вы про dlopen?

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

Я слишком нищеброд, чтобы иметь ретину с макбуком. :).

Тем не менее, косяк во вьювере есть. Как решить эту проблему я не знаю.

Как я понял оригинал фоточки уже не нужен?

Уже нет, спасибо.

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

В любом случае на всякий случай запомнил урл на битбакер, буду собирать переодически и смотреть что изменилось. Спасибо за работу.

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

deb пока не собрал, но под сузю-федору кое-как. надо будет дописать зависимости нормально.

Спасибо.

в любом случае - лови. попробую сегодня сделать для дебов и шапки-центоси

Не совсем понятно, что мне с этим делать? Разместить ссылку в README, добавить в Wiki?

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

По алгоритму AP?

Для более серьезного управления цветом нужно будет делать GUI конфигуратор. Врядли основная масса юзеров будет с радостью править ini-файл. А алгоритм нужно адаптировать под мультиплаторм.

1. Если битмап rgb8, то проблемы нет. Если rgba8, то после трансформации получаю прозрачный битмап.

А разве так не должно быть? Нужно накладывать на rgb-фон (белый или шахматка) своими силами для вывода на окно.

2. Используя профайл в некоторых tiff получаю такую ошибку: «lcms: Error #12288; Read from memory error. Got 0 bytes, block should be of 128 bytes».

некорректная зачитка профайла. Тут либо libtiff косячит, либо еще чота.

3. Brew под macOS знает только о старинной little cms v1.19. Можно ли затянуть к себе в проект сорцы lcms? Или как лучше поступить в данном случае?

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

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

Не совсем понятно, что мне с этим делать? Разместить ссылку в README, добавить в Wiki?

spec-файл в репозитории можно держать. Команда

rpmbuild -ba ***.spec

соберет пакет из исходников

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

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

Можно просто подписаться на слежение за репозиторием - иконка с глазом в правом верхнем углу: https://bitbucket.org/andreyu/simple-viewer-gl

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

Поддержки svg нет вообще.

Подождём. :3

Умеет переключать фреймы gif по хоткею.

Сгодится.

Список зависимостей вижу, пошёл собирать. Если соберётся и будет работать, то запилю ебилд. :3

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

svg... - это можно за счет IM реализовать.

Если мне не изменяет память, то IM «реализует» svg через librsvg, который фейлит половину SVG Test Suite.

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

Вопрос из разряда: «а умеет ли твой компьютер воспроизводить восьмидорожечные кассеты?»

Скорее это вопрос - «а умеет ли твой вьювер работать как вьювер»?

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

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

// Я не занимаюсь вебнёй, но бывает.

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

Если мне не изменяет память, то IM «реализует» svg через librsvg, который фейлит половину SVG Test Suite.

Для большинства случаев сойдет. Кутишная реализация тоже не блещет 100% поддержкой.

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

А Вы действительно запилите в deb, возможно я зря иронизирую и вьювер реально хорош.

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

А разве так не должно быть? Нужно накладывать на rgb-фон (белый или шахматка) своими силами для вывода на окно.

Я полагал, что трансформироваться должен только rgb, а alpha-канал должен оставаться неизменным. Для png я формирую rgb-scanline, трансформирую его, добавляю alpha-канал.
А это все лишнее копирование кусков памяти.

Будет ли проблемой, если в cmsDoTransform() я передам один и тот же указатель в качестве input и output буферов?

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

Вообще, мне часто подобный функционал нужен

Это понятно. Но запилить не просто корректный рендеринг SVG, а ещё и с анимацией — это ну ничё так задачка, не самая тривиальная.

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

Расскажи об этом ширнармассам, ждущим красивых цыферок.

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

Не совсем понятно, что мне с этим делать? Разместить ссылку в README, добавить в Wiki?

странный вопрос. можно прочесть спек и подкорректировать, он простой как тапок. можно протестить сами пакеты. можно сделать свой реп там же, сервис бесплатный, тогда вместо этого репа буду форкать и слать PR если хочется иметь персональный реп. можно скопировать спек на bitbucket в директорию, скажем, rpm, и держать его там если кто захочет сам собрать. можно разместить ссылку в readme/wiki если не пугает что реп чей-то еще.

короче вариантов много

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

Но запилить не просто корректный рендеринг SVG, а ещё и с анимацией — это ну ничё так задачка, не самая тривиальная.

Я в курсе, что это непросто, потому ничего и не говорю на тему отсутствия данного функционала.

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

можно за счет IM реализовать.

Я в гробу видал такой рендеринг, особенно, если это касается SVG — долго, медленно, комп тужится, и через пару минут выдаёт пикчу, а жмёшь зум, и по-новой… Но, да, лучше такой, чем никакого. (=

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

Ну для линя иерархия такая: QtSvg > librsvg > Inkscape > WebKit

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

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

Что же ты хотел, полная поддержка хитросделанного svg сравнимая с рендерингом веб-страниц задача. Без шуток, разнообразные штуки с глифами, векторная графика, анимации. У меня 3 месяца заняла поддержка очень ограниченного субсета, правда, с растеризацией на gpu

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

Вот не надо для рендеринга QtSvg тащить, он совершенно никак не влияет на рендеринг, а потому qtcore ← qtgui ← qtsvg и компания для рендеринга пикчи — лишнее.

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

Тем не менее, косяк во вьювере есть. Как решить эту проблему я не знаю.

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

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

Почти 2 миллиона картинок. Не удивительно.

Не картинок. Просто файлов. 20 тысяч за 30 секунд из кеша. Это считается нормальной скоростью для файловых менеджеров в Гноме и КДЕ.

Simple Viewer GL строит дерево только после нажатия space или backspace. Это сделано именно для быстрого старта в директории с большим количеством файлов.

Можно ускорить. Просто прочитать список файлов, и пока в фоне опрашивается, пытаться открывать соседние файлы, показывая пустой экран или надпись «не картинка», если файл оказывается не картинкой. Когда будет готов нормальный список по сигнатурам, пользоваться им.

Ради интереса натравил вьювер на ~/Pictures под macOS, у меня там чуть больше 18 тысяч файлов - вьювер построил список файлов где-то за секунду. 3.1 GHz Intel Core i7, 16 Gb.

Значит, file читает больше.

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

Решить можно если сгенерить для текстуры mip-map уровни и использовать ближаший к текущему зуму mip уровень.

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

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

Можно ускорить. Просто прочитать список файлов, и пока в фоне опрашивается, пытаться открывать соседние файлы, показывая пустой экран или надпись «не картинка», если файл оказывается не картинкой. Когда будет готов нормальный список по сигнатурам, пользоваться им.

Есть проблема. Какой файл открывать следующим? Список то ведь еще не составлен. Что такое «соседний» файл в случае отсутствия списка?

andreyu ★★★★★
() автор топика

Хм, это значительно лучше, чем то, что можно найти в репозиториях дистрибутивов. Быстрый и понятный. Очень порадовал hjkl. :3

Но:

  • Сетка альфа-канала сильно замылена;
  • Нет автоповтора кнопки (например, для навигации по пикче нужно клацать по кнопке, зажать было бы проще и быстрее);
  • Сворачивание окна при переключении тага/десктопа — это баг, или фича?
  • Хотелось бы видеть относительный шаг при навигации по пикче (очень большие пикчи при минимальном зуме в 25% листаются чуть ли не попиксельно о_О);
  • Жаль, что 25% — это нижний предел зума;
  • Было бы вообще классно иметь возможность ремапа кнопок.
r3lgar ★★★★★
()
Ответ на: комментарий от andreyu

Что такое «соседний» файл в случае отсутствия списка?

Если я выше непонятно написал, то там 2 списка. Список всех файлов, и список файлов с подходящими сигнатурами. Если составление второго ещё не закончено, используется первый.

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

С мичманами понятно. Но для больших картинок это жестокий удар по памяти.

В 2 раза, больше не получится :) Шейдер вариант, но не в общем случае, если зум сделать слишком большой, область станет совсем большой для обработки в рилтайме. Как вариант комбинация и того и того.

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

Сетка альфа-канала сильно замылена;

Она рисуется «пиксел-в-пиксель». Что за замыливание?

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

Есть такое дело, добавлю автоповтор нажатия.

Сворачивание окна при переключении тага/десктопа — это баг, или фича?

Скорее всего косяк или моей реализации, или glfw.

Хотелось бы видеть относительный шаг при навигации по пикче (очень большие пикчи при минимальном зуме в 25% листаются чуть ли не попиксельно о_О);

Пофиксил в development ветке, шаг смещения зависит от зума.

Жаль, что 25% — это нижний предел зума;

Пофиксил в development ветке:

= 100% - шаг 25
= 30% - шаг 5

иначе шаг 1

Было бы вообще классно иметь возможность ремапа кнопок.

Планировал сделать, а потом забил. Но реализовать это несложно.

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

Если я выше непонятно написал, то там 2 списка. Список всех файлов, и список файлов с подходящими сигнатурами. Если составление второго ещё не закончено, используется первый.

Так первый список тоже нужно составить. Обход директории (особенно, если она выпала из кеша ФС) не очень быстр.

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

Будет ли проблемой, если в cmsDoTransform() я передам один и тот же указатель в качестве input и output буферов?

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

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

В 2 раза, больше не получится :)

Картинка 20000х20000х24. Это уже больше гигабайта. Следующий мипмап в 4 раза меньше исходной картинки. Итого уже нужно гигабайт с четвертью. А ведь одним уровнем мипмапа можно и не обойтись.
Да и построение такого мипмапа требует ресурсов.

Шейдер вариант, но не в общем случае, если зум сделать слишком большой, область станет совсем большой для обработки в рилтайме. Как вариант комбинация и того и того.

Буду думать, как лучше поступить.

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