LINUX.ORG.RU

Simple Viewer GL v2.88 — просмотрщик изображений

 , ,


3

3

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

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

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

Новое в 2.88

  • Добавлена поддержка встроенных ICC-профилей.
  • Добавлено поддержка exif (включается по хоткею <e>).
  • Добавленя поддержка анимированных GIF.
  • Поддержка автоповтора нажатой клавиши.
  • Расширена поддержка формата PPM (собственная реализация).
  • Расширена поддержка TARGA (собственная реализация).
  • Если при сборке недоступен imlib2, то для загрузки BMP используется своя реализация (неполная поддержка).
  • Улучшена реализация выделения области изображения.
  • Улучшено отображение информации под курсором (хоткей <p>).
  • Расширена поддержка ZX-Spectrum screen.
  • Переработано определение формата изображения.
  • Отрисовка только тех банков изображения, которые видны в окне.
  • Улучшен скрипт сборки.

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

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

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

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

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

>>> Simple Viewer GL на BitBucket

★★★★★

Проверено: anonymous_incognito ()
Последнее исправление: CYB3R (всего исправлений: 2)

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

В общем, там 2.89. Старый рецепт уже не подходит.

В каталоге dist/debian надо посмотреть все файлы и исправить 2.88 на 2.89.
Ссылку теперь делать не надо. Надо dest/debian переместить в корень исходников
Каталоги res и dist удалить, файлы *.svg и *.desktop тоже.
В мейкфайле в секции deb: удалить команду ln -sf dist/debian debian
Вроде ничего не забыл. Должно собраться по make deb.

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

<b>imul</b>, вот спасибо за помощь!

Завтра заценим. Сам то вьюер уже работает, а вот дебы никогда не делал.

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

dest/debian

dist/debian

Сам мейкфайл писался под дерево исходников 2.88. А потом там много чего изменилось.

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

-D_WITH_DPRINTF

Вы уверены, что без него никак?

Many application writers used the name dprintf before the dprintf() function was introduced in IEEE Std 1003.1 («POSIX.1»), so a prototype is not provided by default in order to avoid compatibility problems. Applications that wish to use the dprintf() function described herein should either request a strict IEEE Std 1003.1-2008 («POSIX.1») environment by defining the macro _POSIX_C_SOURCE to the value 200809 or greater, or by defining the macro _WITH_DPRINTF, prior to the inclusion of <stdio.h>. For compatibility with GNU libc, defining either _BSD_SOURCE or _GNU_SOURCE prior to the inclusion of <stdio.h> will also make dprintf() available.



-L/usr/local/lib -lXinerama

Я полагал, что переменная ${X11_LIBRARIES} должна содержать и это либу.

#include <stdio.h>

Этот фикс нужен, залил в development.

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

Там уже версия бампнулась. Подожди, проверю, напишу.

Пока только в development.

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

-D_WITH_DPRINTF Вы уверены, что без него никак?

Вы правы. Собирается и без него, достаточно include <stdio.h>

Я полагал, что переменная ${X11_LIBRARIES} должна содержать и это либу.

Если убрать L/usr/local/lib, выдает ошибку при линковке:

[100%] Linking CXX executable sviewgl
/usr/bin/ld: cannot find -lexif
c++: error: linker command failed with exit code 1 (use -v to see invocation)
вангую, что дело в этом: https://cmake.org/cmake/help/v3.7/module/FindPkgConfig.html

<XPREFIX>_LIBRARIES ... only the libraries (w/o the '-l')

в общем, message $EXIF_LIBRARIES выводит скромно «exif». Пробный выхлоп GLFW_LIBRARIES выдал

GLFW:/usr/local/lib/libglfw3.a/usr/local/lib/libXrandr.so/usr/local/lib/libXxf86vm.so/usr/local/lib/libXcursor.so-lrt
т.е. очевидно, что PREFIX_LIBRARIES_from_pkg_checkmodule != PREFIX_LIBRARIES_from_find_package

Далее - хз, почему Xinerama не входит в ${X11_LIBRARIES} Вот выхлоп MESSAGE( ${X11_LIBRARIES} )
-- X11 lib:         /usr/local/lib/libSM.so/usr/local/lib/libICE.so/usr/local/lib/libX11.so/usr/local/lib/libXext.so

Хотя, если добавить X11_Xinerama_LIB к target_link_libraries, все собирается нормально:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index ea2a545..04beaa8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -82,6 +82,7 @@ target_link_libraries( sviewgl
     ${DL_LIBRARY}
     ${CMAKE_THREAD_LIBS_INIT}
     ${X11_LIBRARIES}
+    ${X11_Xinerama_LIB}
     ${GLFW_LIBRARIES}
     ${OPENGL_LIBRARY}
     ${ZLIB_LIBRARIES}
@@ -92,7 +93,7 @@ target_link_libraries( sviewgl
     ${WEBP_LIBRARIES}
     ${FREETYPE_LIBRARY}
     ${LCMS2_LIBRARIES}
-    ${EXIF_LIBRARIES}
+    ${EXIF_LDFLAGS}
     )
 
 if(IMLIB2_FOUND)
diff --git a/src/common/config.cpp b/src/common/config.cpp
index 397a4c7..4ad37dc 100644
--- a/src/common/config.cpp
+++ b/src/common/config.cpp
@@ -10,7 +10,7 @@
 #include "config.h"
 #include "../viewer.h"
 #include "Ini.h"
-
+#include <stdio.h>
 #include <cstdlib>
 #include <strings.h>

cmake 3.7.2 собирается и запускаются и дебаг и релиз.

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

Спасибо за расследование проблемы.
Попробуйте сейчас. Оставил ${EXIF_LIBRARIES}, добавил секцию:

link_directories(
    ${EXIF_LIBRARY_DIRS}
    )

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

Может вы знаете, где есть образ BSD (FreeBSD, OpenBSD, etc?) для VirtualBox, с настроенной сетью? Хотелось бы самому попробовать его.

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

Так-с. Cинхронизировал до 6f8808b0105adba234d16251713504b527d6a31d
Выхлоп gmake release (gmake = gnu-тый make):

cd .build_release ; cmake -DCMAKE_BUILD_TYPE=Release .. ; make ; cd ..
-- === RELEASE MODE ===
-- Found lcms version 2.08, /usr/local/lib/liblcms2.so
CMake Error at cmake/FindILMBase.cmake:80 (file):
  file failed to open for reading (No such file or directory):

    /usr/local/lib/pkgconfig/IlmBase.pc
Call Stack (most recent call first):
  CMakeLists.txt:46 (find_package)

если что, IlmBase.pc лежит в /usr/local/libdata/pkgconfig/IlmBase.pc

Я там, ничтоже сумняшеся, сделал бочку^W «фикс» и сборка запустилась:

diff --git a/cmake/FindILMBase.cmake b/cmake/FindILMBase.cmake
index 1637ca2..15c803b 100644
--- a/cmake/FindILMBase.cmake
+++ b/cmake/FindILMBase.cmake
@@ -77,7 +77,8 @@ endif()
 
 get_filename_component(ILMBASE_LIBRARY_DIRS ${ILMBASE_Half_LIBRARY} DIRECTORY)
 
-file(READ "${ILMBASE_LIBRARY_DIRS}/pkgconfig/IlmBase.pc" _ilmbase_PC_CONTENTS)
+pkg_check_modules(ILMBASE REQUIERED IlmBase)
+#file(READ "${ILMBASE_LIBRARY_DIRS}/pkgconfig/IlmBase.pc" _ilmbase_PC_CONTENTS)
 string(REGEX REPLACE
     ".*Version: ([1-9]+\\.[0-9]+\\.[0-9]+).*" "\\1"
     ILMBASE_VERSION "${_ilmbase_PC_CONTENTS}")
но увы:
[100%] Linking CXX executable sviewgl
/usr/bin/ld: cannot find -lexif
c++: error: linker command failed with exit code 1 (use -v to see invocation)
*** Error code 1

Насчет VM: https://download.freebsd.org/ftp/releases/VM-IMAGES/10.3-RELEASE/amd64/Latest/ https://download.freebsd.org/ftp/snapshots/VM-IMAGES/11.0-STABLE/amd64/Latest/

Login root:<blank> Сеть c дефолтным «Intel PRO/1000 MT» + NAT запускается

# dhclient em0 
или на постоянной основе
echo ifconfig_em0=DHCP >> /etc/rc.conf

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

Когда будет 2.89?

Хочется добить поддержку BMP и EXR, пропихнуть версию приложения из Makefile в Cmake.

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

pkg_check_modules(ILMBASE REQUIERED IlmBase)

Да, этот модуль кривовато написан, попробуем так pkg_check_modules(ILMBASE REQUIRED IlmBase) (ошибка в слове REQUIRED).

cannot find -lexif

А чему получается равна ${EXIF_LIBRARY_DIRS}?

https://download.freebsd.org/ftp/snapshots/VM-IMAGES/11.0-STABLE/amd64/Latest/

Спасибо, попробую эту версию.

p.s. залил фиксы.

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

Если кто будет собирать сам пакеты для себя, читайте README.md
Там более актуальные рецепты.
В восьмом демьяне слишком древние ilmbase и openexr. В центоси 7 тоже, но есть неофициально собранные 2.2.0 версии. В федоре 25 и дженте всё собирается полностью.

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

А чему получается равна ${EXIF_LIBRARY_DIRS}?

EXIF LIB DIRS:/usr/local/lib

я тут глянул в ман, а там

The command will apply only to targets created after it is called.

так что рабочая версия выглядит вот так:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b4e9d91..75edda2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,6 +35,9 @@ set(THREADS_PREFER_PTHREAD_FLAG TRUE)
 find_package(Threads REQUIRED)
 
 pkg_check_modules(EXIF REQUIRED libexif)
+link_directories(
+    ${EXIF_LIBRARY_DIRS}
+    )
 
 find_package(Imlib2)
 if(IMLIB2_FOUND)
@@ -109,14 +112,11 @@ else()
     add_executable(sviewgl ${SVIEW_SOURCES})
 endif()
 
-link_directories(
-    ${EXIF_LIBRARY_DIRS}
-    )
-
 target_link_libraries( sviewgl
     ${RT_LIBRARY}
     ${CMAKE_THREAD_LIBS_INIT}
     ${X11_LIBRARIES}
+    ${X11_Xinerama_LIB}
     ${GLFW_LIBRARIES}
     ${OPENGL_LIBRARY}
     ${ZLIB_LIBRARIES}

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

Для этой версии все собирается с:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2cc3c6b..9a208ea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,7 +35,10 @@ set(THREADS_PREFER_PTHREAD_FLAG TRUE)
 find_package(Threads REQUIRED)
 
 pkg_check_modules(EXIF REQUIRED libexif)
-
+link_directories(
+    ${EXIF_LIBRARY_DIRS}
+    )
+    
 find_package(Imlib2)
 if(IMLIB2_FOUND)
     message(STATUS "ImLib2 support enabled")
@@ -109,14 +112,11 @@ else()
     add_executable(sviewgl ${SVIEW_SOURCES})
 endif()
 
-link_directories(
-    ${EXIF_LIBRARY_DIRS}
-    )
-
 target_link_libraries( sviewgl
     ${RT_LIBRARY}
     ${CMAKE_THREAD_LIBS_INIT}
     ${X11_LIBRARIES}
+    ${X11_Xinerama_LIB}
     ${GLFW_LIBRARIES}
     ${OPENGL_LIBRARY}
     ${ZLIB_LIBRARIES}
anonymous
()
Ответ на: комментарий от anonymous

Собирается и работают дебаг и релиз.

Это прекрасно, спасибо.

Даже жаль, что «не мое» (в смысле использования) ;)

А чем пользуетесь?

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

А чем пользуетесь?

Если просто посмотреть, то sxiv. А если нужны «навороты», вроде сортировки или просмотра большого количеств фотографий, то gwenview. Ну или (раз в пол-года) для «обработки» гимп.

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

Если просто посмотреть, то sxiv.

Загрузчик использует imlib2, а это значит что не все картинки он сможет загрузить.

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