| Summary: | If present, change the 'Orientation' meta data on rotation of a jpeg | ||
|---|---|---|---|
| Product: | [Applications] krita | Reporter: | Thomas Zander <zander> |
| Component: | General | Assignee: | Halla Rempt <halla> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | unspecified | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Thomas Zander
2005-09-16 14:42:03 UTC
Yes, we should support exif metadata a lot better: I don't think we support it at all except that we try not to throw it away. It's a new feature, though, and I'm not sure how soon it can be implemented. I could probably try to borrow code from digikam here. SVN commit 500932 by berger:
- check for the ORIENTATION exif tag (will work when rotation and mirror are fixed)
BUG:112727
M +2 -2 Makefile.am
M +57 -0 kis_jpeg_converter.cc
--- trunk/koffice/filters/krita/jpeg/Makefile.am #500931:500932
@@ -7,12 +7,12 @@
libkritajpegexport_la_LDFLAGS = -avoid-version -module -no-undefined \
$(KDE_PLUGIN) $(KDE_RPATH) $(all_libraries)
libkritajpegexport_la_LIBADD = $(top_builddir)/krita/libkritacommon.la \
- libkritaconverter.la $(KOFFICE_LIBS) -ljpeg
+ libkritaconverter.la $(KOFFICE_LIBS) -ljpeg -lexif
libkritajpegimport_la_LDFLAGS = -avoid-version -module -no-undefined \
$(KDE_PLUGIN) $(KDE_RPATH) $(all_libraries)
libkritajpegimport_la_LIBADD = $(top_builddir)/krita/libkritacommon.la \
- libkritaconverter.la $(KOFFICE_LIBS) -ljpeg
+ libkritaconverter.la $(KOFFICE_LIBS) -ljpeg -lexif
INCLUDES= \
-I$(srcdir) \
--- trunk/koffice/filters/krita/jpeg/kis_jpeg_converter.cc #500931:500932
@@ -40,6 +40,8 @@
#include <kis_meta_registry.h>
#include <kis_profile.h>
+#include <libexif/exif-loader.h>
+
#define ICC_MARKER (JPEG_APP0 + 2) /* JPEG marker code for ICC */
#define ICC_OVERHEAD_LEN 14 /* size of non-profile data in APP2 */
#define MAX_BYTES_IN_MARKER 65533 /* maximum data len of a JPEG marker */
@@ -219,9 +221,64 @@
jpeg_destroy_decompress(&cinfo);
fclose(fp);
+ // Read exif information
+ ExifLoader *l = exif_loader_new ();
+
+ exif_loader_write_file (l,uri.path().ascii());
+
+ ExifData *ed = exif_loader_get_data (l);
+
+ ed = exif_loader_get_data (l);
+ exif_loader_unref (l);
+ if (ed) { // there are some exif tags
+ ExifTag tag = EXIF_TAG_ORIENTATION;
+ ExifIfd ifd = EXIF_IFD_0;
+ ExifEntry *e = exif_content_get_entry ( ed->ifd[ifd], tag);
+ if(e)
+ {
+ char buf[1024];
+ char value[1024];
+// exif_entry_get_value (e, value, sizeof(value));
+ ExifShort v_short = exif_get_short (e->data, exif_data_get_byte_order (e->parent->parent));
+// kdDebug() << "tag orientation = " << value << " begin " << v_short << " end" << endl;
+ switch(v_short) //
+ {
+ case 2:
+ layer->paintDevice()->mirrorY();
+ break;
+ case 3:
+ image()->rotate(180, 0);
+ break;
+ case 4:
+ layer->paintDevice()->mirrorX();
+ break;
+ case 5:
+ image()->rotate(90, 0);
+ layer->paintDevice()->mirrorY();
+ break;
+ case 6:
+ image()->rotate(90, 0);
+ break;
+ case 7:
+ image()->rotate(90, 0);
+ layer->paintDevice()->mirrorX();
+ break;
+ case 8:
+ image()->rotate(270, 0);
+ break;
+ default:
+ break;
+ }
+ }
+ } else {
+ kdDebug() << "no exif information" << endl;
+ }
+
return KisImageBuilder_RESULT_OK;
}
+
+
KisImageBuilder_Result KisJPEGConverter::buildImage(const KURL& uri)
{
if (uri.isEmpty())
as exif isn't loaded anymore that bug is back. SVN commit 688358 by berger: restore metadata framework (under the strict condition stated on krita's mailing list) meaning krita can again load exif and iptc tags BUG: 112727 CCBUG: 138923 M +8 -4 filters/krita/CMakeLists.txt M +4 -2 filters/krita/jpeg/CMakeLists.txt M +176 -1 filters/krita/jpeg/kis_jpeg_converter.cc M +1 -1 filters/krita/jpeg/kis_jpeg_converter.h M +49 -1 filters/krita/jpeg/kis_jpeg_export.cc A filters/krita/libkisexiv2 (directory) filters/krita/libkisexiv2#685376 A filters/krita/libkisexiv2/CMakeLists.txt filters/krita/libkisexiv2/CMakeLists.txt#685376 A filters/krita/libkisexiv2/kis_exif_io.cpp filters/krita/libkisexiv2/kis_exif_io.cpp#685376 [License: LGPL (v2+)] A filters/krita/libkisexiv2/kis_exif_io.h filters/krita/libkisexiv2/kis_exif_io.h#685376 [License: LGPL (v2+)] A filters/krita/libkisexiv2/kis_exiv2.cpp filters/krita/libkisexiv2/kis_exiv2.cpp#685376 [License: LGPL (v2+)] A filters/krita/libkisexiv2/kis_exiv2.h filters/krita/libkisexiv2/kis_exiv2.h#685376 [License: LGPL (v2+)] A filters/krita/libkisexiv2/kis_iptc_io.cpp filters/krita/libkisexiv2/kis_iptc_io.cpp#685376 [License: LGPL (v2+)] A filters/krita/libkisexiv2/kis_iptc_io.h filters/krita/libkisexiv2/kis_iptc_io.h#685376 [License: LGPL (v2+)] M +5 -1 krita/image/CMakeLists.txt M +12 -0 krita/image/kis_layer.cc M +8 -0 krita/image/kis_layer.h A krita/image/metadata (directory) krita/image/metadata#685376 A krita/image/metadata/kis_legacy_importer.cc krita/image/metadata/kis_legacy_importer.cc#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_legacy_importer.h krita/image/metadata/kis_legacy_importer.h#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_entry.cc krita/image/metadata/kis_meta_data_entry.cc#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_entry.h krita/image/metadata/kis_meta_data_entry.h#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_io_backend.cc krita/image/metadata/kis_meta_data_io_backend.cc#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_io_backend.h krita/image/metadata/kis_meta_data_io_backend.h#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_schema.cc krita/image/metadata/kis_meta_data_schema.cc#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_schema.h krita/image/metadata/kis_meta_data_schema.h#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_store.cc krita/image/metadata/kis_meta_data_store.cc#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_store.h krita/image/metadata/kis_meta_data_store.h#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_value.cc krita/image/metadata/kis_meta_data_value.cc#685376 [License: LGPL (v2+)] A krita/image/metadata/kis_meta_data_value.h krita/image/metadata/kis_meta_data_value.h#685376 [License: LGPL (v2+)] M +0 -1 krita/plugins/paintops/CMakeLists.txt M +1 -1 krita/plugins/paintops/dynamicbrush/lib/sensors/kis_dynamic_sensor_time.cc M +2 -1 krita/plugins/viewplugins/CMakeLists.txt M +0 -4 krita/plugins/viewplugins/bracketing2hdr/bracketing2hdr.cc A krita/plugins/viewplugins/metadataeditor (directory) krita/plugins/viewplugins/metadataeditor#685376 A krita/plugins/viewplugins/metadataeditor/CMakeLists.txt krita/plugins/viewplugins/metadataeditor/CMakeLists.txt#685376 A krita/plugins/viewplugins/metadataeditor/editors (directory) krita/plugins/viewplugins/metadataeditor/editors#685376 A krita/plugins/viewplugins/metadataeditor/editors/dublincore.rc krita/plugins/viewplugins/metadataeditor/editors/dublincore.rc#685376 A krita/plugins/viewplugins/metadataeditor/editors/dublincore.ui krita/plugins/viewplugins/metadataeditor/editors/dublincore.ui#685376 A krita/plugins/viewplugins/metadataeditor/editors/exif.rc krita/plugins/viewplugins/metadataeditor/editors/exif.rc#685376 A krita/plugins/viewplugins/metadataeditor/editors/exif.ui krita/plugins/viewplugins/metadataeditor/editors/exif.ui#685376 A krita/plugins/viewplugins/metadataeditor/kis_entry_editor.cc krita/plugins/viewplugins/metadataeditor/kis_entry_editor.cc#685376 [License: LGPL (v2+)] A krita/plugins/viewplugins/metadataeditor/kis_entry_editor.h krita/plugins/viewplugins/metadataeditor/kis_entry_editor.h#685376 [License: LGPL (v2+)] A krita/plugins/viewplugins/metadataeditor/kis_meta_data_editor.cc krita/plugins/viewplugins/metadataeditor/kis_meta_data_editor.cc#685376 [License: LGPL (v2+)] A krita/plugins/viewplugins/metadataeditor/kis_meta_data_editor.h krita/plugins/viewplugins/metadataeditor/kis_meta_data_editor.h#685376 [License: LGPL (v2+)] A krita/plugins/viewplugins/metadataeditor/kritametadataeditor.desktop krita/plugins/viewplugins/metadataeditor/kritametadataeditor.desktop#685376 A krita/plugins/viewplugins/metadataeditor/metadataeditor.cc krita/plugins/viewplugins/metadataeditor/metadataeditor.cc#685376 [License: LGPL (v2+)] A krita/plugins/viewplugins/metadataeditor/metadataeditor.h krita/plugins/viewplugins/metadataeditor/metadataeditor.h#685376 [License: LGPL (v2+)] A krita/plugins/viewplugins/metadataeditor/metadataeditor.rc krita/plugins/viewplugins/metadataeditor/metadataeditor.rc#685376 |