• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegraphics API Reference
  • KDE Home
  • Contact Us
 

libs/libkexiv2/libkexiv2

  • sources
  • kde-4.14
  • kdegraphics
  • libs
  • libkexiv2
  • libkexiv2
kexiv2previews.cpp
Go to the documentation of this file.
1 
28 #include "kexiv2previews.h"
29 
30 // Local includes
31 
32 #include "kexiv2_p.h"
33 #include "kexiv2.h"
34 
35 namespace KExiv2Iface
36 {
37 
38 class KExiv2Previews::Private
39 {
40 public:
41 
42  Private()
43  {
44  manager = 0;
45  }
46 
47  ~Private()
48  {
49  delete manager;
50  }
51 
52  void load(Exiv2::Image::AutoPtr image_)
53  {
54  image = image_;
55 
56  image->readMetadata();
57 
58  manager = new Exiv2::PreviewManager(*image);
59  Exiv2::PreviewPropertiesList props = manager->getPreviewProperties();
60 
61  // reverse order of list, which is smallest-first
62  Exiv2::PreviewPropertiesList::reverse_iterator it;
63 
64  for (it = props.rbegin() ; it != props.rend() ; ++it)
65  {
66  properties << *it;
67  }
68  }
69 
70 public:
71 
72  Exiv2::Image::AutoPtr image;
73  Exiv2::PreviewManager* manager;
74  QList<Exiv2::PreviewProperties> properties;
75 };
76 
77 KExiv2Previews::KExiv2Previews(const QString& filePath)
78  : d(new Private)
79 {
80  try
81  {
82  Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((const char*)(QFile::encodeName(filePath)));
83  d->load(image);
84  }
85  catch( Exiv2::Error& e )
86  {
87  KExiv2::Private::printExiv2ExceptionError("Cannot load metadata using Exiv2 ", e);
88  }
89  catch(...)
90  {
91  kError() << "Default exception from Exiv2";
92  }
93 }
94 
95 KExiv2Previews::KExiv2Previews(const QByteArray& imgData)
96  : d(new Private)
97 {
98  try
99  {
100  Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((Exiv2::byte*)imgData.data(), imgData.size());
101  d->load(image);
102  }
103  catch( Exiv2::Error& e )
104  {
105  KExiv2::Private::printExiv2ExceptionError("Cannot load metadata using Exiv2 ", e);
106  }
107  catch(...)
108  {
109  kError() << "Default exception from Exiv2";
110  }
111 }
112 
113 KExiv2Previews::~KExiv2Previews()
114 {
115  delete d;
116 }
117 
118 bool KExiv2Previews::isEmpty()
119 {
120  return d->properties.isEmpty();
121 }
122 
123 QSize KExiv2Previews::originalSize() const
124 {
125  if (d->image.get())
126  return QSize(d->image->pixelWidth(), d->image->pixelHeight());
127 
128  return QSize();
129 }
130 
131 QString KExiv2Previews::originalMimeType() const
132 {
133  if (d->image.get())
134  return d->image->mimeType().c_str();
135 
136  return QString();
137 }
138 
139 int KExiv2Previews::count()
140 {
141  return d->properties.size();
142 }
143 
144 int KExiv2Previews::dataSize(int index)
145 {
146  if (index < 0 || index >= size()) return 0;
147 
148  return d->properties[index].size_;
149 }
150 
151 int KExiv2Previews::width(int index)
152 {
153  if (index < 0 || index >= size()) return 0;
154 
155  return d->properties[index].width_;
156 }
157 
158 int KExiv2Previews::height(int index)
159 {
160  if (index < 0 || index >= size()) return 0;
161 
162  return d->properties[index].height_;
163 }
164 
165 QString KExiv2Previews::mimeType(int index)
166 {
167  if (index < 0 || index >= size()) return 0;
168 
169  return QString::fromLatin1(d->properties[index].mimeType_.c_str());
170 }
171 
172 QString KExiv2Previews::fileExtension(int index)
173 {
174  if (index < 0 || index >= size()) return 0;
175 
176  return QString::fromLatin1(d->properties[index].extension_.c_str());
177 }
178 
179 QByteArray KExiv2Previews::data(int index)
180 {
181  if (index < 0 || index >= size()) return QByteArray();
182 
183  kDebug() << "index: " << index;
184  kDebug() << "d->properties: " << count();
185 
186  try
187  {
188  Exiv2::PreviewImage image = d->manager->getPreviewImage(d->properties[index]);
189  return QByteArray((const char*)image.pData(), image.size());
190  }
191  catch( Exiv2::Error& e )
192  {
193  KExiv2::Private::printExiv2ExceptionError("Cannot load metadata using Exiv2 ", e);
194  return QByteArray();
195  }
196  catch(...)
197  {
198  kError() << "Default exception from Exiv2";
199  return QByteArray();
200  }
201 }
202 
203 QImage KExiv2Previews::image(int index)
204 {
205  QByteArray previewData = data(index);
206  QImage image;
207 
208  if (!image.loadFromData(previewData))
209  return QImage();
210 
211  return image;
212 }
213 
214 } // namespace KExiv2Iface
QImage::loadFromData
bool loadFromData(const uchar *data, int len, const char *format)
KExiv2Iface::KExiv2Previews::data
QByteArray data(int index=0)
Retrieve the image data for the specified embedded preview image.
Definition: kexiv2previews.cpp:179
KExiv2Iface::KExiv2Previews::originalSize
QSize originalSize() const
Returns the pixel size of the original image, as read from the file (not the metadata).
Definition: kexiv2previews.cpp:123
QByteArray
KExiv2Iface::KExiv2Previews::originalMimeType
QString originalMimeType() const
Returns the mimeType of the original image, detected from the file's content.
Definition: kexiv2previews.cpp:131
KExiv2Iface::KExiv2Previews::KExiv2Previews
KExiv2Previews(const QString &filePath)
Open the given file and scan for embedded preview images.
Definition: kexiv2previews.cpp:77
KExiv2Iface::KExiv2Previews::isEmpty
bool isEmpty()
Returns if there are any preview images available.
Definition: kexiv2previews.cpp:118
kexiv2previews.h
===========================================================This file is a part of digiKam project htt...
KExiv2Iface::KExiv2Previews::mimeType
QString mimeType(int index=0)
Definition: kexiv2previews.cpp:165
QString
QList< Exiv2::PreviewProperties >
KExiv2Iface::KExiv2Previews::width
int width(int index=0)
Definition: kexiv2previews.cpp:151
QSize
QImage
KExiv2Iface::KExiv2Previews::size
int size()
Definition: kexiv2previews.h:72
KExiv2Iface::KExiv2Previews::dataSize
int dataSize(int index=0)
For each contained preview image, return the size of the image data in bytes, width and height of the...
Definition: kexiv2previews.cpp:144
KExiv2Iface::KExiv2Previews::~KExiv2Previews
~KExiv2Previews()
Definition: kexiv2previews.cpp:113
KExiv2Iface::KExiv2::Private::printExiv2ExceptionError
static void printExiv2ExceptionError(const QString &msg, Exiv2::Error &e)
Generic method to print the Exiv2 C++ Exception error message from 'e'.
KExiv2Iface::KExiv2Previews::count
int count()
Returns how many embedded previews are available.
Definition: kexiv2previews.cpp:139
KExiv2Iface::KExiv2Previews::image
QImage image(int index=0)
Loads the data of the specified preview and creates a QImage from this data.
Definition: kexiv2previews.cpp:203
kexiv2_p.h
===========================================================This file is a part of digiKam project htt...
KExiv2Iface::KExiv2Previews::fileExtension
QString fileExtension(int index=0)
Definition: kexiv2previews.cpp:172
QByteArray::data
char * data()
QString::fromLatin1
QString fromLatin1(const char *str, int size)
QByteArray::size
int size() const
KExiv2Iface::KExiv2Previews::height
int height(int index=0)
Definition: kexiv2previews.cpp:158
kexiv2.h
===========================================================This file is a part of digiKam project htt...
QFile::encodeName
QByteArray encodeName(const QString &fileName)
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:19:40 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libs/libkexiv2/libkexiv2

Skip menu "libs/libkexiv2/libkexiv2"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegraphics API Reference

Skip menu "kdegraphics API Reference"
  •     libkdcraw
  •     libkexiv2
  •     libkipi
  •     libksane
  • okular

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal