summaryrefslogtreecommitdiff
path: root/jpeg-utils.cpp
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2008-08-10 14:30:23 +0200
committerTomas Bzatek <tbzatek@users.sourceforge.net>2008-08-10 14:30:23 +0200
commit3462576fd6bc883c41042fb7ae93ebabb12718d8 (patch)
tree3a6e85717d93b375c5b46674894f4b44d2c961b3 /jpeg-utils.cpp
parentee8d3aa3f337cef3faae8d45c6e23ab05f380db8 (diff)
downloadcataract-3462576fd6bc883c41042fb7ae93ebabb12718d8.tar.xz
Support for different preview image borders
Strip trailing whitespaces
Diffstat (limited to 'jpeg-utils.cpp')
-rw-r--r--jpeg-utils.cpp198
1 files changed, 99 insertions, 99 deletions
diff --git a/jpeg-utils.cpp b/jpeg-utils.cpp
index 973b448..5c50914 100644
--- a/jpeg-utils.cpp
+++ b/jpeg-utils.cpp
@@ -1,16 +1,16 @@
/* Cataract - Static web photo gallery generator
* Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
- *
+ *
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -29,17 +29,17 @@
/*
- * get_exif: retrieve EXIF informations from a JPEG image
- */
-int
+ * get_exif: retrieve EXIF informations from a JPEG image
+ */
+int
get_exif (const char *filename, TExifData **exif_data)
{
TExifData *data;
-
+
data = (TExifData*) malloc (sizeof (TExifData));
memset (data, 0, sizeof (TExifData));
*exif_data = data;
-
+
try
{
Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename);
@@ -56,7 +56,7 @@ get_exif (const char *filename, TExifData **exif_data)
} catch (...) { }
/* EXIF::Camera model */
- try {
+ try {
const char *val = exifData["Exif.Image.Model"].toString().c_str();
if (val && strlen(val) > 0)
data->camera_model = strdup (val);
@@ -72,12 +72,12 @@ get_exif (const char *filename, TExifData **exif_data)
try {
val = exifData["Exif.Image.DateTime"].toString().c_str();
} catch (...) { }
-
+
if (val && strlen(val) > 0) {
static struct tm tt;
static char conv[1024];
-
- if (sscanf (val, "%d:%d:%d %d:%d:%d", &tt.tm_year, &tt.tm_mon, &tt.tm_mday, &tt.tm_hour, &tt.tm_min, &tt.tm_sec) == 6)
+
+ if (sscanf (val, "%d:%d:%d %d:%d:%d", &tt.tm_year, &tt.tm_mon, &tt.tm_mday, &tt.tm_hour, &tt.tm_min, &tt.tm_sec) == 6)
{
tt.tm_year -= 1900;
tt.tm_mon--;
@@ -95,15 +95,15 @@ get_exif (const char *filename, TExifData **exif_data)
data->exposure = g_strdup_printf ("1/%.0f s", 1/val);
else
data->exposure = g_strdup_printf ("%.1f s", val);
- }
+ }
} catch (...) { }
/* EXIF::Flash */
try {
- long int val = exifData["Exif.Photo.Flash"].toLong();
+ long int val = exifData["Exif.Photo.Flash"].toLong();
if ((val > 0) && ((val & 1) == 1))
data->flash = strdup ((char *) "Flash fired");
- else
+ else
data->flash = strdup ((char *) "--");
} catch (...) { }
@@ -122,27 +122,27 @@ get_exif (const char *filename, TExifData **exif_data)
} catch (...) { }
/* EXIF::Software */
- try {
+ try {
data->exif_software = strdup (exifData["Exif.Image.Software"].toString().c_str());
} catch (...) { }
-
+
/* EXIF::Image description */
- try {
+ try {
data->exif_imgdesc = strdup (exifData["Exif.Image.ImageDescription"].toString().c_str());
} catch (...) { }
-
+
/* EXIF::Artist */
- try {
+ try {
data->exif_artist = strdup (exifData["Exif.Image.Artist"].toString().c_str());
} catch (...) { }
-
+
/* EXIF::Copyright */
- try {
+ try {
data->exif_copyright = strdup (exifData["Exif.Image.Copyright"].toString().c_str());
} catch (...) { }
-
+
/* EXIF::User comment */
- try {
+ try {
data->exif_usercomment = strdup (exifData["Exif.Photo.UserComment"].toString().c_str());
} catch (...) { }
}
@@ -150,45 +150,45 @@ get_exif (const char *filename, TExifData **exif_data)
Exiv2::IptcData &iptcData = image->iptcData();
if (! iptcData.empty()) {
/* IPTC::Object name */
- try {
+ try {
data->iptc_objectname = strdup (iptcData["Iptc.Application2.ObjectName"].toString().c_str());
} catch (...) { }
/* IPTC::Copyright */
- try {
+ try {
data->iptc_copyright = strdup (iptcData["Iptc.Application2.Copyright"].toString().c_str());
} catch (...) { }
/* IPTC::Credit */
- try {
+ try {
data->iptc_credit = strdup (iptcData["Iptc.Application2.Credit"].toString().c_str());
} catch (...) { }
/* IPTC::Caption */
- try {
+ try {
data->iptc_caption = strdup (iptcData["Iptc.Application2.Caption"].toString().c_str());
} catch (...) { }
/* IPTC::Author */
- try {
+ try {
data->iptc_author = strdup (iptcData["Iptc.Application2.Byline"].toString().c_str());
} catch (...) { }
}
-
+
}
- catch (Exiv2::AnyError& e)
+ catch (Exiv2::AnyError& e)
{
fprintf (stderr, "get_exif: Caught Exiv2 exception: '%s'\n", e.what());
return -1;
}
-
+
/* Read the JPEG comment */
MagickBooleanType status;
MagickWand *magick_wand;
char *comment;
MagickWandGenesis();
- magick_wand = NewMagickWand();
+ magick_wand = NewMagickWand();
status = MagickPingImage (magick_wand, filename);
if (status == MagickTrue) {
comment = MagickGetImageProperty(magick_wand, "comment");
@@ -198,8 +198,8 @@ get_exif (const char *filename, TExifData **exif_data)
}
magick_wand = DestroyMagickWand (magick_wand);
MagickWandTerminus();
-
-
+
+
#ifdef __DEBUG_ALL__
printf("EXIF_TAG_DATE_TIME = '%s'\n", data->datetime);
printf("EXIF_TAG_MODEL = '%s'\n", data->camera_model);
@@ -220,72 +220,72 @@ get_exif (const char *filename, TExifData **exif_data)
printf("Iptc.Application2.Caption = '%s'\n", data->iptc_caption);
printf("Iptc.Application2.Byline = '%s'\n", data->iptc_author);
printf("JPEG comment = '%s'\n", data->jpeg_comment);
-#endif
+#endif
- return 0;
+ return 0;
}
/*
- * free_exif_struct: free allocated structure
- */
-void
+ * free_exif_struct: free allocated structure
+ */
+void
free_exif_data (TExifData *data)
{
if (data) {
- if (data->aperture)
- free (data->aperture);
- if (data->camera_model)
- free (data->camera_model);
- if (data->datetime)
- free (data->datetime);
- if (data->exposure)
- free (data->exposure);
- if (data->flash)
- free (data->flash);
- if (data->focal_length)
- free (data->focal_length);
- if (data->focal_length_35mm)
- free (data->focal_length_35mm);
- if (data->iso)
+ if (data->aperture)
+ free (data->aperture);
+ if (data->camera_model)
+ free (data->camera_model);
+ if (data->datetime)
+ free (data->datetime);
+ if (data->exposure)
+ free (data->exposure);
+ if (data->flash)
+ free (data->flash);
+ if (data->focal_length)
+ free (data->focal_length);
+ if (data->focal_length_35mm)
+ free (data->focal_length_35mm);
+ if (data->iso)
free (data->iso);
- if (data->exif_software)
+ if (data->exif_software)
free (data->exif_software);
- if (data->exif_imgdesc)
+ if (data->exif_imgdesc)
free (data->exif_imgdesc);
- if (data->exif_artist)
+ if (data->exif_artist)
free (data->exif_artist);
- if (data->exif_copyright)
+ if (data->exif_copyright)
free (data->exif_copyright);
- if (data->exif_usercomment)
+ if (data->exif_usercomment)
free (data->exif_usercomment);
-
- if (data->iptc_objectname)
+
+ if (data->iptc_objectname)
free (data->iptc_objectname);
- if (data->iptc_copyright)
+ if (data->iptc_copyright)
free (data->iptc_copyright);
- if (data->iptc_credit)
+ if (data->iptc_credit)
free (data->iptc_credit);
- if (data->iptc_caption)
+ if (data->iptc_caption)
free (data->iptc_caption);
- if (data->iptc_author)
+ if (data->iptc_author)
free (data->iptc_author);
-
- if (data->jpeg_comment)
+
+ if (data->jpeg_comment)
free (data->jpeg_comment);
-
+
free (data);
data = NULL;
- }
+ }
}
/*
- * resize_image: resize image pointed by src and save result to dst
- */
-gboolean
-resize_image (const char *src, const char *dst,
- int size_x, int size_y,
+ * resize_image: resize image pointed by src and save result to dst
+ */
+gboolean
+resize_image (const char *src, const char *dst,
+ int size_x, int size_y,
int quality)
{
#define ThrowWandException(wand) \
@@ -298,19 +298,19 @@ resize_image (const char *src, const char *dst,
description = (char*) MagickRelinquishMemory (description); \
return FALSE; \
}
-
+
MagickBooleanType status;
MagickWand *magick_wand;
-
+
/* Read an image. */
MagickWandGenesis();
- magick_wand = NewMagickWand();
+ magick_wand = NewMagickWand();
status = MagickReadImage (magick_wand, src);
if (status == MagickFalse)
ThrowWandException (magick_wand);
MagickResizeImage (magick_wand, size_x, size_y, LanczosFilter, 1.0);
MagickSetImageCompressionQuality (magick_wand, quality);
-
+
/* Write the image and destroy it. */
status = MagickWriteImage (magick_wand, dst);
if (status == MagickFalse)
@@ -323,10 +323,10 @@ resize_image (const char *src, const char *dst,
/*
- * get_image_sizes: retrieve image dimensions
- */
-void
-get_image_sizes (const char *img,
+ * get_image_sizes: retrieve image dimensions
+ */
+void
+get_image_sizes (const char *img,
unsigned long *width, unsigned long *height)
{
#define xThrowWandException(wand) \
@@ -339,49 +339,49 @@ get_image_sizes (const char *img,
description = (char*) MagickRelinquishMemory(description); \
return; \
}
-
+
MagickBooleanType status;
MagickWand *magick_wand;
*width = -1;
- *height = -1;
+ *height = -1;
/* Read an image. */
MagickWandGenesis();
- magick_wand = NewMagickWand();
+ magick_wand = NewMagickWand();
status = MagickPingImage (magick_wand, img);
- if (status == MagickFalse)
+ if (status == MagickFalse)
xThrowWandException (magick_wand);
*width = MagickGetImageWidth (magick_wand);
*height = MagickGetImageHeight (magick_wand);
-
+
magick_wand = DestroyMagickWand (magick_wand);
MagickWandTerminus();
}
/*
- * calculate_sizes: calculate maximal image sizes within specified limits keeping aspect ratio
- */
-void
-calculate_sizes (const unsigned long max_width, const unsigned long max_height,
+ * calculate_sizes: calculate maximal image sizes within specified limits keeping aspect ratio
+ */
+void
+calculate_sizes (const unsigned long max_width, const unsigned long max_height,
unsigned long *width, unsigned long *height)
{
- if ((max_width > *width) && (max_height > *height))
+ if ((max_width > *width) && (max_height > *height))
return;
-
+
double max_ratio = (double) max_width / (double) max_height;
double real_ratio = (double) *width / (double) *height;
-
+
if ((*width > *height) && (max_ratio <= real_ratio))
{
- *height = max_width / real_ratio;
+ *height = max_width / real_ratio;
*width = max_width;
}
else
- {
+ {
*width = max_height * real_ratio;
- *height = max_height;
+ *height = max_height;
}
-}
+}