https://bugs.kde.org/show_bug.cgi?id=320107
Gilles Caulier <[hidden email]> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Latest Commit| |http://commits.kde.org/digi | |kam/ca2f3ae955ebe88fbc4d734 | |f5249e29fbb645269 Version Fixed In| |4.12.0 Resolution|--- |FIXED --- Comment #37 from Gilles Caulier <[hidden email]> --- Git commit ca2f3ae955ebe88fbc4d734f5249e29fbb645269 by Gilles Caulier. Committed on 24/06/2015 at 14:59. Pushed by cgilles into branch 'master'. add perfect JPEG transform checks to prevent broken image rotation/flip when image size is not compatible with IMCU properties. This will only work with libjpeg >= 8.0 BUGS: 320107 FIXED-IN: 4.12.0 M +2 -1 NEWS M +27 -6 libs/jpegutils/jpegutils.cpp M +1 -1 libs/jpegutils/jpegutils.h http://commits.kde.org/digikam/ca2f3ae955ebe88fbc4d734f5249e29fbb645269 diff --git a/NEWS b/NEWS index a825b82..e31b848 100644 --- a/NEWS +++ b/NEWS @@ -30,4 +30,5 @@ BUGFIXES FROM KDE BUGZILLA (https://www.digikam.org/changelog): 023 ==> 345990 - 4.9.0 import from external card reader crashe. 024 ==> 339615 - Crashed after selecting Import (sd card reader). 025 ==> 277242 - MYSQL : using different databases for images metadata and thumbnail cache is broken. -026 ==> +026 ==> 320107 - Flip/Mirror operation doesn't flip/mirror the entirety of the picture (there is a strip left unmirrored) [patch]. +027 ==> diff --git a/libs/jpegutils/jpegutils.cpp b/libs/jpegutils/jpegutils.cpp index 6fd8375..1a150f9 100644 --- a/libs/jpegutils/jpegutils.cpp +++ b/libs/jpegutils/jpegutils.cpp @@ -7,7 +7,7 @@ * Description : perform lossless rotation/flip to JPEG file * * Copyright (C) 2004-2005 by Renchi Raju <renchi dot raju at gmail dot com> - * Copyright (C) 2006-2014 by Gilles Caulier <caulier dot gilles at gmail dot com> + * Copyright (C) 2006-2015 by Gilles Caulier <caulier dot gilles at gmail dot com> * Copyright (C) 2006-2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de> * * Parts of the loading code is taken from qjpeghandler.cpp, copyright follows: @@ -329,7 +329,8 @@ bool loadJPEGScaled(QImage& image, const QString& path, int maximumSize) } JpegRotator::JpegRotator(const QString& file) - : m_file(file), m_destFile(file) + : m_file(file), + m_destFile(file) { m_metadata.load(file); m_orientation = m_metadata.getImageOrientation(); @@ -412,9 +413,29 @@ bool JpegRotator::exifTransform(const RotationMatrix& matrix) if (!performJpegTransform(actions[i], src, tempFile)) { - ::unlink(QFile::encodeName(tempFile)); - kError() << "JPEG transform of" << src << "failed"; - return false; + kError() << "JPEG lossless transform failed for" << src; + + // See bug 320107 : if lossless transform cannot be achieve, do lossy transform. + DImg srcImg; + + kError() << "Trying lossy transform for " << src; + + if (!srcImg.load(src)) + { + ::unlink(QFile::encodeName(tempFile)); + return false; + } + + if (actions[i] != KExiv2Iface::RotationMatrix::NoTransformation) + { + srcImg.transform(actions[i]); + } + + if (!srcImg.save(tempFile, DImg::JPEG)) + { + ::unlink(QFile::encodeName(tempFile)); + return false; + } } if (i+1 != actions.size()) @@ -531,7 +552,7 @@ bool JpegRotator::performJpegTransform(TransformAction action, const QString& sr #if (JPEG_LIB_VERSION >= 80) // we need to initialize a few more parameters, see bug 274947 - transformoption.perfect = false; + transformoption.perfect = true; // See bug 320107 : we need perfect transform here. transformoption.crop = false; #endif diff --git a/libs/jpegutils/jpegutils.h b/libs/jpegutils/jpegutils.h index bf2e3de..ef74676 100644 --- a/libs/jpegutils/jpegutils.h +++ b/libs/jpegutils/jpegutils.h @@ -7,7 +7,7 @@ * Description : perform lossless rotation/flip to JPEG file * * Copyright (C) 2004-2005 by Renchi Raju <renchi dot raju at gmail dot com> - * Copyright (C) 2006-2014 by Gilles Caulier <caulier dot gilles at gmail dot com> + * Copyright (C) 2006-2015 by Gilles Caulier <caulier dot gilles at gmail dot com> * Copyright (C) 2006-2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de> * * This program is free software; you can redistribute it -- You are receiving this mail because: You are the assignee for the bug. _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Free forum by Nabble | Edit this page |