[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