diff options
| author | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2008-08-10 14:30:23 +0200 |
|---|---|---|
| committer | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2008-08-10 14:30:23 +0200 |
| commit | 3462576fd6bc883c41042fb7ae93ebabb12718d8 (patch) | |
| tree | 3a6e85717d93b375c5b46674894f4b44d2c961b3 /jpeg-utils.cpp | |
| parent | ee8d3aa3f337cef3faae8d45c6e23ab05f380db8 (diff) | |
| download | cataract-3462576fd6bc883c41042fb7ae93ebabb12718d8.tar.xz | |
Support for different preview image borders
Strip trailing whitespaces
Diffstat (limited to 'jpeg-utils.cpp')
| -rw-r--r-- | jpeg-utils.cpp | 198 |
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; } -} +} |
