Coder Social home page Coder Social logo

novomesk / qt-avif-image-plugin Goto Github PK

View Code? Open in Web Editor NEW
91.0 7.0 7.0 43.01 MB

Qt plug-in to allow Qt and KDE based applications to read/write AVIF images.

License: BSD 2-Clause "Simplified" License

Shell 0.44% C++ 18.01% QMake 0.01% CMake 1.04% C 59.16% Batchfile 0.03% Python 0.67% Raku 0.11% Assembly 19.74% Perl 0.26% HTML 0.04% JavaScript 0.01% Dockerfile 0.01% CoffeeScript 0.02% Meson 0.12% Makefile 0.09% Java 0.05% Starlark 0.02% M4 0.09% Roff 0.08%
qt avif imageformats kde

qt-avif-image-plugin's Introduction

qt-avif-image-plugin

Qt plug-in to allow Qt and KDE based applications to read/write AVIF images.

Manual How to install AVIF support in KDE

What is AVIF?

AV1 Image File Format (AVIF) is an advanced image format specified by Alliance for Open Media.

AVIF is technically a picture compressed with AV1 video codec wrapped in ISO Base Media File Format.
AV1 compression provides significantly better efficiency than traditional JPEG. Beside 8bit per channel AVIF allows 10bit and 12bit depth, transparency, color profiles, metadata, animation, compression quality ranging from visually lossless to highly compressed lossy while maintaining decent visual quality at low bitrates.

1) Download

Download Latest Release and extract the content of the zip file:

unzip qt-avif-image-plugin-0.8.5.zip

Recommended: read README.txt

2) Adding MIME type

If you have shared-mime-info 2.0 or newer installed, you may skip this step. AVIF MIME type are installed already.

In order to install mime type image/avif in your system, copy (as root) qt-avif-image-plugin.xml file to /usr/share/mime/packages/ folder and run:

update-mime-database /usr/share/mime

qt-avif-image-plugin.xml

3) Compile Qt Image Plugin

Qt Image Plugin allows Qt and KDE applications to open/save pictures in AVIF format. The plug-in uses libavif internally.
You need Qt5 development packages (for example qtbase5-dev), qmake, you may also need cmake and yasm.

If your system has libavif installed (version 0.8.2 or newer, check for the presence of /usr/include/avif/avif.h), run:

./build_libqavif_dynamic.sh

If you don't have libavif installed, run:

./build_libqavif_static.sh

Alternative way of building using cmake

This alternative requires extra-cmake-modules

mkdir build
cd build
cmake ..
make

Windows builds

MSYS2 platform

Use same steps like building under Linux.

Microsoft Visual Studio + Qt Creator

You need to prepare libaom.a and libavif.a before opening qt-avif-image-plugin_local-libavif.pro in Qt Creator.

Prepare libaom.a

Create folder ext\libavif\ext\aom\build.libavif\ and change to this folder.

Run C:\Qt\Tools\CMake_64\bin\cmake.exe -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=Release -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCONFIG_PIC=1 ..

cmake should create project files for Visual Studio. Now you can open AOM.sln

Go to Configuration Manager... and change (if necessary) Active solution configuration from Debug to Release.

Build Solution

Copy and rename ext\libavif\ext\aom\build.libavif\Release\aom.lib to ext\libavif\ext\aom\build.libavif\libaom.a

Prepare libavif.a

Create folder ext\libavif\build\ and change to this folder.

Run C:\Qt\Tools\CMake_64\bin\cmake.exe -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DAVIF_CODEC_AOM=ON -DAVIF_LOCAL_AOM=ON ..

cmake should create project files for Visual Studio. Now you can open libavif.sln

Go to Configuration Manager... and change (if necessary) Active solution configuration from Debug to Release.

Build Solution

Copy and rename ext\libavif\build\Release\avif.lib to ext\libavif\build\libavif.a

Open qt-avif-image-plugin_local-libavif.pro in Qt Creator

Build Project qt-avif-image-plugin_local-libavif qt-avif-image-plugin in Qt Creator

Plug-in is ready in plugins\imageformats\qavif.dll

4) Install libqavif.so

Copy libqavif.so to a folder where qt5-image-formats-plugins and/or kimageformats are installed. It could be one of these locations:

  • /usr/lib/qt5/plugins/imageformats
  • /usr/lib/qt/plugins/imageformats/
  • /usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats

installed libqavif.so in /plugins/imageformats

5) Associate *.avif with applications

Qt based applications should be able to open AVIF images now.
Example how to associate AVIF file type with gwenview:

6) Enable AVIF thumbnails in dolphin file manager

Copy avif.desktop, avifs.desktop to:
/usr/share/kservices5/qimageioplugins/

Update imagethumbnail.desktop (in /usr/share/kservices5/ ):
Add ;image/avif to the MimeType= list:

AVIF thumbnails in dolphin:

7) Enjoy using AVIF in applications

gwenview

AVIF picture in gwenview

KolourPaint

AVIF picture in kolourpaint

nomacs

AVIF images in nomacs

KPhotoAlbum

AVIF images in kphotoalbum

digiKam

AVIF images in digikam

qView

AVIF image in qView

LXImage-Qt

AVIF image in LXImage-Qt

qimgv

AVIF images in qimgv

PhotoQt

AVIF images in photoqt

Kanryu QuickViewer

AVIF image in quickviewer

VookiImageViewer

AVIF image in vooki-image-viewer

YACReader

AVIF image in YACReader - Yet Another Comic Reader

qt-avif-image-plugin's People

Contributors

novomesk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

qt-avif-image-plugin's Issues

Cannot compile with libavif master.

$./build_libqavif_dynamic.sh                                                                                                          
g++ -c -pipe -Wall -Wextra -O2 -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_PLUGIN -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/qt -isystem /usr/include/qt/QtGui -isystem /usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++ -o avif_qt.o avif_qt.cpp
avif_qt.cpp: In member function ‘virtual bool AVIFHandler::write(const QImage&)’:
avif_qt.cpp:472:18: error: ‘avifNclxColorProfile’ {aka ‘struct avifNclxColorProfile’} has no member named ‘fullRangeFlag’
  472 |             nclx.fullRangeFlag = AVIF_NCLX_FULL_RANGE;
      |                  ^~~~~~~~~~~~~
avif_qt.cpp:472:34: error: ‘AVIF_NCLX_FULL_RANGE’ was not declared in this scope
  472 |             nclx.fullRangeFlag = AVIF_NCLX_FULL_RANGE;
      |                                  ^~~~~~~~~~~~~~~~~~~~
make: *** [Makefile:745: avif_qt.o] Error 1
Failed to build libqavif.so

Possible small bug with QImageReader::size

Hi again novomesk. This plugin is one of the most extensively developed I have seen, great work!
I noticed in qView that when opening an AVIF image for the first time, the size is reported as -1, -1. After the first image is opened, the correct size is reported until the program is restarted. Are you able to reproduce this, or does this make sense in your code?

Thank you for your time.

Draft a Release

could you please draft a release (i.e. 0.1)? This also creates a tarball which I can use for the flathub build.

thanks!

Check possibility for decoder/thread reuse

First-off - very cool plugin, works off the bat and I like how well it automatically blends in with the Qt image system.

But I found it to be fairly slow.
I noticed in the debugger, that for every image being loaded, 20 threads get launched and then exit again, which seems to me an unnecessary overhead, that may cost more time than it speeds up.
20 threads is the number of logical CPUs on my PC, so that's a match.

The problem is, that Qt will create and destroy an instance of the image handler for each and every picture loaded.

So I wonder, if it shouldn't be possible to create a single, static instance of the avifDecoder and have it keep the threads throughout runtime.
From the libavif explanation of maxThreads, I can't tell how much the avif decoder will actually benefit from multiple threads, if at all. The main use seems to be to parallelize multiple images, which doesn't happen anyway in this current use-case.

Is dav1d supported through libavif?

I made a windows x32 msvc 2019 build that resulted in a dll of 748kb, but it does not seem to actually work when put in a program.
dav1d takes so much less time to build that I would prefer to use that instead of aom.

How do I get it to work on yac reader windows 11?

I tried everything. Placed the DLLsin 'C:\Program Files\YACReader\imageformats'. Tried with both read only and write DLLs. Still yac says comic not found upon opening CBZs with avif files. Please help.

Building on Windows with CMake

I'm trying to use this plugin in a project that uses CMake. I made some modifications to the CMakeLists.txt files to get it to compile. To build libavif, I used libavif from conan (since the project already uses conan and its CMake integration). So finding the avif target wasn't a problem. The only problem was the use of KDE's extra CMake modules. I disabled the search for them on Windows.

Qt 6 added qt_add_plugin which makes it simple to add plugins. To add the plugin, I only need to do the following:

if (QT_AVIF_IMAGE_PLUGIN_STATIC)
  set(_avif_plugin_type STATIC)
else()
  set(_avif_plugin_type SHARED)
endif()
# this requires Qt >= 6
qt_add_plugin("libqavif${QT_MAJOR_VERSION}" ${_avif_plugin_type} CLASS_NAME "QAVIFPlugin")
target_sources("libqavif${QT_MAJOR_VERSION}" PRIVATE ${libqavif_SOURCES})
target_link_libraries("libqavif${QT_MAJOR_VERSION}" PRIVATE Qt${QT_MAJOR_VERSION}::Gui avif)
set_target_properties("libqavif${QT_MAJOR_VERSION}" PROPERTIES
  AUTOMOC ON
  LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/imageformats"
)

This code should work for all systems. Qt 5 doesn't have this function, so I'm not sure what the best approach there is.

To use the static version of the plugin in my app, I need to enable QT_AVIF_IMAGE_PLUGIN_STATIC, include the library with add_subdirectory and add "libqavif${QT_MAJOR_VERSION}" in target_link_libraries.

I'll put the diff here, I can open a PR if desired.

Diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f434169..026cae6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,18 +2,23 @@ cmake_minimum_required(VERSION 3.16)
 
 project(qt-avif-image-plugin)
 
+option(QT_AVIF_IMAGE_PLUGIN_STATIC "Build plugin as static library" Off)
+
 include(FeatureSummary)
-find_package(ECM 5.89.0  NO_MODULE)
-set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
-feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
+
+if (NOT WIN32)
+  find_package(ECM 5.89.0  NO_MODULE)
+  set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
+  feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
 
 
-set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
+  set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
 
-include(KDEInstallDirs)
-include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
-include(KDECMakeSettings)
+  include(KDEInstallDirs)
+  include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
+  include(KDECMakeSettings)
 
+endif()
 
 include(CheckIncludeFiles)
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 07b8fe2..eb392be 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -18,13 +18,31 @@ endfunction()
 
 ##################################
 
-kimageformats_add_plugin("libqavif${QT_MAJOR_VERSION}" SOURCES "main.cpp" "qavifhandler.cpp")
-
-if(BUILD_QAVIF_DYNAMIC)
-  target_link_libraries("libqavif${QT_MAJOR_VERSION}" "avif")
-else()
-  target_include_directories("libqavif${QT_MAJOR_VERSION}" BEFORE PUBLIC $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/ext/libavif/include>)
-  target_link_libraries("libqavif${QT_MAJOR_VERSION}" "${CMAKE_SOURCE_DIR}/ext/libavif/build/libavif.a" "${CMAKE_SOURCE_DIR}/ext/libavif/ext/aom/build.libavif/libaom.a" "pthread")
+set(libqavif_SOURCES "main.cpp" "qavifhandler.cpp")
+
+if (NOT ${QT_MAJOR_VERSION} MATCHES "6") # TODO: figure this out
+  kimageformats_add_plugin("libqavif${QT_MAJOR_VERSION}" SOURCES ${libqavif_SOURCES})
+
+  if(BUILD_QAVIF_DYNAMIC)
+    target_link_libraries("libqavif${QT_MAJOR_VERSION}" "avif")
+  else()
+    target_include_directories("libqavif${QT_MAJOR_VERSION}" BEFORE PUBLIC $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/ext/libavif/include>)
+    target_link_libraries("libqavif${QT_MAJOR_VERSION}" "${CMAKE_SOURCE_DIR}/ext/libavif/build/libavif.a" "${CMAKE_SOURCE_DIR}/ext/libavif/ext/aom/build.libavif/libaom.a" "pthread")
+  endif()
+else ()
+  if (QT_AVIF_IMAGE_PLUGIN_STATIC)
+    set(_avif_plugin_type STATIC)
+  else()
+    set(_avif_plugin_type SHARED)
+  endif()
+  # this requires Qt >= 6
+  qt_add_plugin("libqavif${QT_MAJOR_VERSION}" ${_avif_plugin_type} CLASS_NAME "QAVIFPlugin")
+  target_sources("libqavif${QT_MAJOR_VERSION}" PRIVATE ${libqavif_SOURCES})
+  target_link_libraries("libqavif${QT_MAJOR_VERSION}" PRIVATE Qt${QT_MAJOR_VERSION}::Gui avif)
+  set_target_properties("libqavif${QT_MAJOR_VERSION}" PROPERTIES
+    AUTOMOC ON
+    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/imageformats"
+  )
 endif()
 
 #install(FILES "${CMAKE_SOURCE_DIR}/share/kservices5/qimageioplugins/avif.desktop" "${CMAKE_SOURCE_DIR}/share/kservices5/qimageioplugins/avifs.desktop" DESTINATION ${KDE_INSTALL_KSERVICESDIR}/qimageioplugins/)

Draft a Release

I now tested your appveyor built with nomacs and it works like a charm. Currently, I simply download the dll in cmake assuming there will always be one named qavif.dll.

If you could change the status of 0.2.0 from pre-release to release (or draft a new one), I could change the download to the generic releases/latest/qavif.dll.

thanks for contributing!

Doesn't compile

Well, as the title says, it does not compile:

> ./build_libqavif_dynamic.sh 
g++ -c -pipe -Wall -Wextra -O2 -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_PLUGIN -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I. -o avif_qt.o avif_qt.cpp
In file included from avif_qt.cpp:41:
avif_qt_p.h:63:23: error: ‘IID’ has not been declared
   63 |     Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "avif.json")
      |                       ^~~
avif_qt_p.h:63:27: error: expected ‘,’ or ‘...’ before string constant
   63 |     Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "avif.json")
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
avif_qt_p.h:63:95: error: ISO C++ forbids declaration of ‘Q_PLUGIN_METADATA’ with no type [-fpermissive]
   63 |     Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "avif.json")
      |                                                                                               ^
avif_qt_p.h:63:95: error: expected ‘;’ at end of member declaration
   63 |     Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "avif.json")
      |                                                                                               ^
      |                                                                                                ;
avif_qt.cpp: In member function ‘bool AVIFHandler::decode_one_frame()’:
avif_qt.cpp:226:92: error: ‘Format_RGBA8888’ is not a member of ‘QImage’
  226 |     QImage result ( m_decoder->image->width, m_decoder->image->height, loadalpha ? QImage::Format_RGBA8888 : QImage::Format_RGB888 );
      |                                                                                            ^~~~~~~~~~~~~~~
avif_qt.cpp: In member function ‘virtual bool AVIFHandler::write(const QImage&)’:
avif_qt.cpp:409:87: error: ‘Format_RGBA8888’ is not a member of ‘QImage’
  409 |     const QImage tmpimage = image.convertToFormat ( image.hasAlphaChannel() ? QImage::Format_RGBA8888 : QImage::Format_RGB888 );
      |                                                                                       ^~~~~~~~~~~~~~~
avif_qt.cpp:526:45: error: ‘qUtf8Printable’ was not declared in this scope; did you mean ‘qPrintable’?
  526 |             qWarning ( "Write error: %s\n", qUtf8Printable ( device()->errorString() ) );
      |                                             ^~~~~~~~~~~~~~
      |                                             qPrintable
make: *** [Makefile:180: avif_qt.o] Fehler 1
Failed to build libqavif.so

I installed the devel packages for Qt5. I also tried opening it with QtCreator, and it gives the same errors.

Unknown error at runtime

Hello, I successfully compiled and installed the plugin, however I get errors when opening avif images (encoded with the latest libaom/libavif):

$ gwenview file.avif
QImageReader::read() using format hint "avif" failed: "Unknown error"
A bad Qt image decoder moved the buffer to 20102 in a call to canRead()! Rewinding.
QImageReader::read() without format hint failed: "Unsupported image format"
QImageReader::read() using format hint "avif" failed: "Unknown error"
A bad Qt image decoder moved the buffer to 50421 in a call to canRead()! Rewinding.
QImageReader::read() without format hint failed: "Unsupported image format"

I've tried both the static and dynamic build, but I get the same result.

avifDecoderSetIOMemory not declared

GCC: 10.2.0
libavif: 0.8.1

Output of ./build_libqavif_dynamic.sh:

Info: creating stash file /home/Temp/qt-avif-image-plugin/.qmake.stash
g++ -c -pipe -O2 -std=c++1z -Wall -Wextra -Wvla -Wdate-time -Wshift-overflow=2 -Wduplicated-cond -Wno-stringop-overflow -Wno-format-overflow -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -D_REENTRANT -fPIC -DQT_NO_LINKED_LIST -DQT_DEPRECATED_WARNINGS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_GUI_LIB -DQT_CORE_LIB -I. -I/usr/include/qt -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I.moc -I/usr/lib/qt/mkspecs/linux-g++ -o .obj/qavifhandler.o src/qavifhandler.cpp
src/qavifhandler.cpp: In member function ‘bool QAVIFHandler::ensureDecoder()’:
src/qavifhandler.cpp:130:20: error: ‘avifDecoderSetIOMemory’ was not declared in this scope; did you mean ‘avifDecoderNextImage’?
  130 |     decodeResult = avifDecoderSetIOMemory(m_decoder, &m_rawAvifData);
      |                    ^~~~~~~~~~~~~~~~~~~~~~
      |                    avifDecoderNextImage
src/qavifhandler.cpp:140:46: error: too few arguments to function ‘avifResult avifDecoderParse(avifDecoder*, const avifROData*)’
  140 |     decodeResult = avifDecoderParse(m_decoder);
      |                                              ^
In file included from src/qavifhandler_p.h:8,
                 from src/qavifhandler.cpp:41:
/usr/include/avif/avif.h:614:12: note: declared here
  614 | avifResult avifDecoderParse(avifDecoder * decoder, const avifROData * input);
      |            ^~~~~~~~~~~~~~~~
make: *** [Makefile:638: .obj/qavifhandler.o] Error 1
Failed to build libqavif.so

Library not included in kimageformat-plugins 5.79?

The release page states that as of kimageformats 5.78 the avif library is included. I found the KDE merge, but as you can see below support is not included as of 5.79. Am I missing something?

➜  ~ apt info kimageformat-plugins
Package: kimageformat-plugins
Version: 5.79.0-0xneon+20.04+focal+build12
Priority: optional
Section: kde
Source: kimageformats
Maintainer: Neon CI <[email protected]>
Installed-Size: 527 kB
Depends: libc6 (>= 2.27), libgcc-s1 (>= 3.0), libilmbase24 (>= 2.3.0), libkf5archive5, libopenexr24 (>= 2.3.0), libqt5core5a (>= 5.15.2+dfsg), libqt5gui5 (>= 5.15.2+dfsg), libqt5printsupport5 (>= 5.15.2+dfsg), libstdc++6 (>= 5)
Homepage: https://projects.kde.org/projects/frameworks/kimageformats
Download-Size: 114 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.neon.kde.org/user focal/main amd64 Packages
Description: additional image format plugins for QtGui

N: There are 4 additional records. Please use the '-a' switch to see them.

Maybe I need to build from this repo?

➜  ~ dpkg-query -L kimageformat-plugins
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/qt5
/usr/lib/x86_64-linux-gnu/qt5/plugins
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_ani.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_eps.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_exr.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_hdr.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_kra.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_ora.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_pcx.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_pic.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_psd.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_ras.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_rgb.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_tga.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/kimg_xcf.so
/usr/share
/usr/share/doc
/usr/share/doc/kimageformat-plugins
/usr/share/doc/kimageformat-plugins/README.md
/usr/share/doc/kimageformat-plugins/changelog.Debian.gz
/usr/share/doc/kimageformat-plugins/copyright
/usr/share/kservices5
/usr/share/kservices5/qimageioplugins
/usr/share/kservices5/qimageioplugins/ani.desktop
/usr/share/kservices5/qimageioplugins/dds.desktop
/usr/share/kservices5/qimageioplugins/eps.desktop
/usr/share/kservices5/qimageioplugins/exr.desktop
/usr/share/kservices5/qimageioplugins/hdr.desktop
/usr/share/kservices5/qimageioplugins/jp2.desktop
/usr/share/kservices5/qimageioplugins/kra.desktop
/usr/share/kservices5/qimageioplugins/ora.desktop
/usr/share/kservices5/qimageioplugins/pcx.desktop
/usr/share/kservices5/qimageioplugins/pic.desktop
/usr/share/kservices5/qimageioplugins/psd.desktop
/usr/share/kservices5/qimageioplugins/ras.desktop
/usr/share/kservices5/qimageioplugins/rgb.desktop
/usr/share/kservices5/qimageioplugins/tga.desktop
/usr/share/kservices5/qimageioplugins/xcf.desktop

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.