SVN commit 614945 by cgilles:
digiKam from trunk : native support of JPEG2000 file format. JPEG2000 is an advanced picture compression file format based on wavelet theory. It support 16 bits/color/pixel, metadata, and ICC color profile. Look url below for more informations: http://www.ece.uvic.ca/~mdadams/jasper http://en.wikipedia.org/wiki/JPEG_2000 http://www.geocities.com/ee00224/btp2.html http://www.photozone.de/7Digital/jpeg2000.htm Still TODO with this JPEG2000 loader : - The JPEG2000 quality level settings is the same than JPEG in setup dialog. We need to create a dedicaced widget settings for each digiKam image loader (TIFF/PNG/JPEG/JPEG2000). There is a file in B.K.O about this subject. - YCbCr color space is not yet supported. In fact, because digiKam support only RGB* color space, we need to have an ICC color method to transform non-RGB* color space to RGB* using lcms libary for all image file formats witch can do use it (JPEG/JPEG2000/TIFF). - Embedding ICC color profile doesn't work. It implemented but something still wrong. - JPEG2000 Metadata extraction (EXIF/IPTC) not yet done in Exiv2. To packagers : digiKam have a new library depency : libJasper. CCMAIL: [hidden email] M +5 -1 README M +12 -1 configure.in.bot M +19 -1 configure.in.in M +34 -3 libs/dimg/dimg.cpp M +1 -0 libs/dimg/dimg.h M +7 -6 libs/dimg/loaders/Makefile.am M +2 -2 libs/dimg/loaders/README M +1 -1 utilities/setup/setupiofiles.cpp --- trunk/extragear/graphics/digikam/README #614944:614945 @@ -78,7 +78,7 @@ AutoConf >= 2.5.x http://www.gnu.org/software/autoconf AutoMake >= 1.7.x http://www.gnu.org/software/automake -KDE >= 3.x (>=3.5.x recommended) http://www.kde.org +libkde >= 3.x (>=3.5.x recommended) http://www.kde.org libsqlite >= 3.x http://www.sqlite.org libexiv2 >= 0.12 http://www.exiv2.org libgphoto2 >= 2.x (>=2.2.x recommended) http://www.gphoto.org @@ -86,7 +86,11 @@ liblcms >= 1.14.x http://www.littlecms.com libtiff >= 3.6.x (>=3.8.2 recommended) http://www.remotesensing.org/libtiff libpng >= 1.2.x http://www.libpng.org/pub/png/libpng.html +libjasper >= 1.7.x http://www.ece.uvic.ca/~mdadams/jasper +Note : all libraries depencies requires developement and binary packages installed on your +computer to compile digiKam. + -- INSTALLATION -------------------------------------------------------- In the source directory do : --- trunk/extragear/graphics/digikam/configure.in.bot #614944:614945 @@ -59,6 +59,17 @@ echo "-- libpng found................... YES" fi +if test "x$have_jasper" != "xyes"; then + echo "-- libjasper found................ NO" + echo "" + echo "digiKam needs libjasper to support JPEG2000. You need to install the correct version (>= 1.7.0)." + echo "Libjasper website is at http://www.ece.uvic.ca/~mdadams/jasper" + echo "" + all_tests=bad +else + echo "-- libjasper found................ YES" +fi + if test "x$have_lcms" != "xyes"; then echo "-- lcms found..................... NO" echo "" @@ -73,7 +84,7 @@ if test "x$have_exiv2" != "xyes"; then echo "-- Exiv2 library found............ NO" echo "" - echo "digiKam needs Exiv2 library >= 0.12. You need to install Exiv2 first" + echo "digiKam needs Exiv2 library. You need to install the correct version (>= 0.12)." echo "Exiv2 website is at http://www.exiv2.org" echo "" all_tests=bad --- trunk/extragear/graphics/digikam/configure.in.in #614944:614945 @@ -1,6 +1,6 @@ #MIN_CONFIG(3) -AM_INIT_AUTOMAKE(digikam,0.9.0) +AM_INIT_AUTOMAKE(digikam,0.9.1) # ----------------------------------------------------------------- # enable hidden visibility only if kde >= 3.3.2 and kdelibs has @@ -211,6 +211,24 @@ fi #------------------------------------------------------------------ +# Check for libjasper (JPEG2000) +#------------------------------------------------------------------ + +have_jasper=no +KDE_CHECK_LIB(jasper, jas_init, + have_jasper=yes, + AC_MSG_WARN([digiKam requires libjasper >= 1.7.0]), + -ljasper) + +if test "x$have_jasper" != "xyes"; then + AC_WARN([digiKam requires libjasper >= 1.7.0; digiKam will not be compiled.]) + DO_NOT_COMPILE="digikam digikamimageplugins $DO_NOT_COMPILE" +else + LIB_JASPER="-ljasper" + AC_SUBST(LIB_JASPER) +fi + +#------------------------------------------------------------------ # Check for Exiv2 library #------------------------------------------------------------------ --- trunk/extragear/graphics/digikam/libs/dimg/dimg.cpp #614944:614945 @@ -46,6 +46,7 @@ #include "tiffloader.h" #include "ppmloader.h" #include "rawloader.h" +#include "jp2kloader.h" #include "qimageloader.h" #include "dimgprivate.h" #include "dimgloaderobserver.h" @@ -357,6 +358,20 @@ } break; } + case(JP2K): + { + DDebug() << filePath << " : JPEG2000 file identified" << endl; + JP2KLoader loader(this); + if (loader.load(filePath, observer)) + { + m_priv->null = false; + m_priv->alpha = loader.hasAlpha(); + m_priv->sixteenBit = loader.sixteenBit(); + m_priv->isReadOnly = loader.isReadOnly(); + return true; + } + break; + } default: { DDebug() << filePath << " : QIMAGE file identified" << endl; @@ -386,7 +401,7 @@ QString frm = format.upper(); - if (frm == "JPEG" || frm == "JPG" || frm == "JPE" ) + if (frm == "JPEG" || frm == "JPG" || frm == "JPE") { JPEGLoader loader(this); return loader.save(filePath, observer); @@ -406,6 +421,11 @@ PPMLoader loader(this); return loader.save(filePath, observer); } + if (frm == "JP2" || frm == "JPX" || frm == "JPC" || frm == "PGX") + { + JP2KLoader loader(this); + return loader.save(filePath, observer); + } else { setAttribute("format", format); @@ -444,6 +464,10 @@ return TIFF; else if (rawFilesExt.upper().contains(ext)) return RAW; + if (ext == QString("JP2") || ext == QString("JPX") || // JPEG2000 file format + ext == QString("JPC") || // JPEG2000 code stream + ext == QString("PGX")) // JPEG2000 WM format + return JP2K; } // In second, we trying to parse file header. @@ -456,10 +480,10 @@ return NONE; } - const int headerLen = 8; + const int headerLen = 9; unsigned char header[headerLen]; - if (fread(&header, 8, 1, f) != 1) + if (fread(&header, headerLen, 1, f) != 1) { DDebug() << k_funcinfo << "Failed to read header of file \"" << filePath << "\"" << endl; fclose(f); @@ -473,6 +497,8 @@ uchar tiffBigID[2] = { 0x4D, 0x4D }; uchar tiffLilID[2] = { 0x49, 0x49 }; uchar pngID[8] = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }; + uchar jp2ID[5] = { 0x6A, 0x50, 0x20, 0x20, 0x0D, }; + uchar jpcID[2] = { 0xFF, 0x4F }; if (memcmp(&header, &jpegID, 2) == 0) // JPEG file ? { @@ -512,6 +538,11 @@ { return TIFF; } + else if (memcmp(&header[4], &jp2ID, 5) == 0 || // JPEG2000 file ? + memcmp(&header, &jpcID, 2) == 0) + { + return JP2K; + } // In others cases, QImage will be used to try to open file. return QIMAGE; --- trunk/extragear/graphics/digikam/libs/dimg/dimg.h #614944:614945 @@ -60,6 +60,7 @@ TIFF, RAW, PPM, + JP2K, QIMAGE }; --- trunk/extragear/graphics/digikam/libs/dimg/loaders/Makefile.am #614944:614945 @@ -4,13 +4,14 @@ noinst_LTLIBRARIES = libdimgloaders.la libdimgloaders_la_SOURCES = dimgloader.cpp pngloader.cpp jpegloader.cpp tiffloader.cpp \ - rawloader.cpp ppmloader.cpp qimageloader.cpp iccjpeg.c + rawloader.cpp ppmloader.cpp qimageloader.cpp iccjpeg.c \ + jp2kloader.cpp libdimgloaders_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) \ - $(LIBJPEG) $(LIB_TIFF) $(LIB_PNG) + $(LIBJPEG) $(LIB_TIFF) $(LIB_PNG) $(LIB_JASPER) INCLUDES = $(all_includes) -I$(top_srcdir)/digikam/libs/dimg \ - -I$(top_srcdir)/digikam/libs/dmetadata \ - -I$(top_srcdir)/digikam/libs/dcraw \ - -I$(top_srcdir)/digikam/digikam \ - -I$(top_srcdir)/digikam + -I$(top_srcdir)/digikam/libs/dmetadata \ + -I$(top_srcdir)/digikam/libs/dcraw \ + -I$(top_srcdir)/digikam/digikam \ + -I$(top_srcdir)/digikam --- trunk/extragear/graphics/digikam/libs/dimg/loaders/README #614944:614945 @@ -1,6 +1,6 @@ --------------------------------------------------------------------------- -Native DIMG Loaders status (Gilles Caulier - 2006-05-26) +Native DIMG Loaders status (Gilles Caulier - 2006-11-29) Format Read Write ICC MetaData Thumb 8bits 16bits depency Remarks @@ -9,6 +9,7 @@ TIF/EP Done Done Done Done TODO yes yes libtiff Metadata are EXIF/IPTC/XMP/ICC profil RAW Done N.A N.A Done Done yes yes dcraw Metadata are EXIF PPM Done TODO N.A N.A N.A yes yes none +JPEG2K Done TODO Done TODO N.A yes yes libjasper Metadata are EXIF/XMP/ICC profil Others file formats are supported only in 8 bits/color/pixel using QImage/kimgio. QT3.x + KDE 3.4.x support these formats : @@ -16,7 +17,6 @@ Format Read Write Remarks PSD yes no Photoshop file format -JP2 yes yes JPEG 2000 (libjasper) EXR yes no OpenEXR (libopenexr) XCF yes no Gimp file format PBM yes yes --- trunk/extragear/graphics/digikam/utilities/setup/setupiofiles.cpp #614944:614945 @@ -94,7 +94,7 @@ d->JPEGcompression = new KIntNumInput(75, savingOptionsGroup); d->JPEGcompression->setRange(1, 100, 1, true ); - d->labelJPEGcompression = new QLabel(i18n("JPEG quality:"), savingOptionsGroup); + d->labelJPEGcompression = new QLabel(i18n("JPEG/JPEG2000 quality:"), savingOptionsGroup); QWhatsThis::add( d->JPEGcompression, i18n("<p>The quality value for JPEG images:<p>" "<b>1</b>: low quality (high compression and small " _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
> - The JPEG2000 quality level settings is the same than JPEG in setup
> dialog. We need to create a dedicaced widget settings for each digiKam > image loader (TIFF/PNG/JPEG/JPEG2000). There is a file in B.K.O about this > subject. Marcel, About this subject, I propose to open a setting dialog just after the dialog used to save an image from image editor (like gimp/photoshop does). Trying to add a settings area in the file save dialog look impossible with KFileDIalog class. Of course the advantage of this way is to reduce the dialog open, but it require to create a new file dialog in digiKAm core using a new layout and more options. Second question is where to store the image loader settings widgets implementation (TIFF/PNG/JPEG/JPEG2000) : in libs/dimg/loader or in utilities/imageeditor/ ? Gilles _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
> Marcel,
> > About this subject, I propose to open a setting dialog just after the > dialog used to save an image from image editor (like gimp/photoshop does). > > Trying to add a settings area in the file save dialog look impossible with > KFileDIalog class. Take a look at the second constructor of KFileDialog. You can specify a QWidget* which will be embedded into the dialog at the bottom. I once played with it, I hope I can find the code somewhere. The only problem was aligning the layout with the other widgets. > Of course the advantage of this way is to reduce the > dialog open, but it require to create a new file dialog in digiKAm core > using a new layout and more options. > > Second question is where to store the image loader settings widgets > implementation (TIFF/PNG/JPEG/JPEG2000) : in libs/dimg/loader or in > utilities/imageeditor/ ? Don't know... The information is specific to each loader, so the advantage of libs/dimg/loader is to keep everything in one place. Marcel > > Gilles _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Le mardi 19 décembre 2006 18:48, Marcel Wiesweg a écrit :
> > Marcel, > > > > About this subject, I propose to open a setting dialog just after the > > dialog used to save an image from image editor (like gimp/photoshop > > does). > > > > Trying to add a settings area in the file save dialog look impossible > > with KFileDIalog class. > > Take a look at the second constructor of KFileDialog. You can specify a > QWidget* which will be embedded into the dialog at the bottom. > I once played with it, I hope I can find the code somewhere. The only > problem was aligning the layout with the other widgets. Damned, i have an old KDE API doc (:=)))... Sorry for the bad sound. I will take a look. > > > Of course the advantage of this way is to reduce the > > dialog open, but it require to create a new file dialog in digiKAm core > > using a new layout and more options. > > > > Second question is where to store the image loader settings widgets > > implementation (TIFF/PNG/JPEG/JPEG2000) : in libs/dimg/loader or in > > utilities/imageeditor/ ? > > Don't know... > The information is specific to each loader, so the advantage of > libs/dimg/loader is to keep everything in one place. > yes, krita use the same way. Gilles _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
In reply to this post by Gilles Caulier-2
Dnia wto gru 19 2006, Gilles Caulier napisał:
> SVN commit 614945 by cgilles: > > digiKam from trunk : native support of JPEG2000 file format. configure cannot find libjasper. I installed in /usr/local libjasper 1.900 but digikam says it cannot find libjasper >= 1.7.0 Note: I have installed libjasper 1.701 from rpm but it also isn't enough for digikam. Cannot make "clean" install of 1.900 because looks like half of system depends on this rpm... m. _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Le mardi 19 décembre 2006 19:44, Mikolaj Machowski a écrit :
> Dnia wto gru 19 2006, Gilles Caulier napisał: > > SVN commit 614945 by cgilles: > > > > digiKam from trunk : native support of JPEG2000 file format. > > configure cannot find libjasper. > > I installed in /usr/local libjasper 1.900 but digikam says it cannot > find libjasper >= 1.7.0 > > Note: I have installed libjasper 1.701 from rpm but it also isn't enough > for digikam. Cannot make "clean" install of 1.900 because looks like > half of system depends on this rpm... > It's always the same : install developement package, not only binary shared lib package. Tested under Mandriva 2006/2007 and Suse 10.1 sucessfully. Gilles _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Free forum by Nabble | Edit this page |