[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdeextragear-1/gwenview/src
From:       Aurélien Gâteau <aurelien.gateau () free ! fr>
Date:       2004-10-02 18:49:57
Message-ID: 20041002184957.E3CE4735 () office ! kde ! org
[Download RAW message or body]

CVS commit by gateau: 

Make sure the EXIF thumbnail is updated when a JPEG image is modified in a
lossless way.


  M +3 -2      gvdocumentjpegloadedimpl.cpp   1.7
  M +36 -3     gvimageutils.cpp   1.11
  M +1 -1      gvimageutils.h   1.11


--- kdeextragear-1/gwenview/src/gvdocumentjpegloadedimpl.cpp  #1.6:1.7
@@ -134,5 +134,7 @@ bool GVDocumentJPEGLoadedImpl::localSave
 
         if (!d->mRawData.isNull() && qstrcmp(format, "JPEG")==0) {
-                LOG("Lossless save");
+                LOG("JPEG Reset orientation");
+                d->mRawData=GVImageUtils::resetOrientation(d->mRawData, \
mDocument->image()); +                LOG("JPEG Lossless save");
                 QFile file(path);
                 result=file.open(IO_WriteOnly);
@@ -172,5 +174,4 @@ void GVDocumentJPEGLoadedImpl::finishLoa
                 setImage(GVImageUtils::modify(mDocument->image(), orientation));
                 d->mRawData=GVJPEGTran::apply(d->mRawData, orientation);
-                d->mRawData=GVImageUtils::setOrientation(d->mRawData,GVImageUtils::NORMAL);
  
                 emit sizeUpdated(mDocument->image().width(), \
mDocument->image().height());

--- kdeextragear-1/gwenview/src/gvimageutils.cpp  #1.10:1.11
@@ -1,4 +1,9 @@
 // vim: set tabstop=4 shiftwidth=4 noexpandtab
+// System
+#include <stdlib.h>
+#include <string.h>
+
 // Qt
+#include <qbuffer.h>
 #include <qcstring.h>
 #include <qfile.h>
@@ -91,5 +96,5 @@ void getOrientationAndThumbnail(const QS
 
 
-QByteArray setOrientation(const QByteArray& jpegContent, Orientation orientation) {
+QByteArray resetOrientation(const QByteArray& jpegContent, const QImage& image) {
         JPEGDataPtr jpegData( jpeg_data_new_from_data((unsigned \
char*)jpegContent.data(),jpegContent.size()) );  if (!jpegData) {
@@ -103,4 +108,5 @@ QByteArray setOrientation(const QByteArr
         ExifByteOrder byteOrder=exif_data_get_byte_order(exifData);
         
+        // Set Orientation tag to NORMAL
         ExifEntry* entry( exif_content_get_entry(
                         exifData->ifd[EXIF_IFD_0], EXIF_TAG_ORIENTATION) );
@@ -108,6 +114,33 @@ QByteArray setOrientation(const QByteArr
                 return jpegContent;
         }
-        exif_set_short(entry->data, byteOrder, short(orientation));
+        exif_set_short(entry->data, byteOrder, short(GVImageUtils::NORMAL));
 
+        // Update EXIF thumbnail, if any
+        if( exifData->data != NULL ) {
+                free(exifData->data);
+                exifData->data=NULL;
+                exifData->size=0;
+
+                QImage thumb=image.scale(128, 128, QImage::ScaleMin);
+                
+                QByteArray array;
+                QBuffer buffer(array);
+                buffer.open(IO_WriteOnly);
+                QImageIO iio(&buffer, "JPEG");
+                iio.setImage(thumb);
+                if (iio.write()) {
+                        exifData->size=array.size();
+                        exifData->data=(unsigned char*)malloc(exifData->size);
+                        if (exifData->data) {
+                                memcpy(exifData->data, array.data(), array.size());
+                        } else {
+                                kdWarning() << "Could not allocate memory for \
thumbnail\n"; +                        }
+                } else {
+                        kdWarning() << "Could not write thumbnail\n";
+                }
+        }
+        
+        // Store EXIF data into JPEG
         jpeg_data_set_exif_data(jpegData, exifData);
         unsigned char* dest=0L;

--- kdeextragear-1/gwenview/src/gvimageutils.h  #1.10:1.11
@@ -37,5 +37,5 @@ namespace GVImageUtils {
                 SmoothAlgorithm alg, QImage::ScaleMode mode = QImage::ScaleFree, \
double blur = 1.0);  
-        QByteArray setOrientation(const QByteArray& jpegContent, Orientation \
orientation); +        QByteArray resetOrientation(const QByteArray& jpegContent, \
const QImage& image);  Orientation getOrientation(const QByteArray& jpegContent);
         Orientation getOrientation(const QString& pixPath);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic