Mercurial > hg > octave-nkf
diff scripts/image/imfinfo.m @ 8144:01fac748b680
Add the 'imfinfo' function for reading image file information.
author | sh@sh-laptop |
---|---|
date | Wed, 24 Sep 2008 15:40:27 -0400 |
parents | |
children | 2b48deec1aa2 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/scripts/image/imfinfo.m @@ -0,0 +1,120 @@ +## Copyright (C) 2008 Soren Hauberg <hauberg@gmail.com> +## +## This file is part of Octave. +## +## Octave 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 3 of the License, or (at +## your option) any later version. +## +## Octave 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{info} =} imfinfo (@var{filename}) +## @deftypefnx{Function File} {@var{info} =} imfinfo (@var{url}) +## Read image information from a file. +## +## @code{imfinfo} returns a structure containing information about the image +## stored in the file @var{filename}. The output structure contains the +## following fields. +## +## @table @samp +## @item Filename +## The full name of the image file. +## @item FileSize +## Number of bytes of the image on disk +## @item FileModDate +## Date of last modification to the file. +## @item Height +## Image height in pixels. +## @item Width +## Image Width in pixels. +## @item BitDepth +## Number of bits per channel per pixel. +## @item Format +## Image format (e.g. @code{"jpeg"}). +## @item LongFormat +## Long form image format description. +## @item XResolution +## X resolution of the image. +## @item YResolution +## Y resolution of the image. +## @item TotalColors +## Number of unique colors in the image. +## @item TileName +## Tile name. +## @item AnimationDelay +## Time in 1/100ths of a second (0 to 65535) which must expire before displaying +## the next image in an animated sequence. +## @item AnimationIterations +## Number of iterations to loop an animation (e.g. Netscape loop extension) for. +## @item ByteOrder +## Endian option for formats that support it. Is either @code{"little-endian"}, +## @code{"big-endian"}, or @code{"undefined"}. +## @item Gamma +## Gamma level of the image. The same color image displayed on two different +## workstations may look different due to differences in the display monitor. +## @item Matte +## @code{true} if the image has transparency. +## @item ModulusDepth +## Image modulus depth (minimum number of bits required to support red/green/blue +## components without loss of accuracy). +## @item Quality +## JPEG/MIFF/PNG compression level. +## @item QuantizeColors +## Preferred number of colors in the image. +## @item ResolutionUnits +## Units of image resolution. Is either @code{"pixels per inch"}, +## @code{"pixels per centimeter"}, or @code{"undefined"}. +## @item ColorType +## Image type. Is either @code{"grayscale"}, @code{"indexed"}, @code{"truecolor"}, +## or @code{"undefined"}. +## @item View +## FlashPix viewing parameters. +## @end table +## +## @seealso{imread, imwrite} +## @end deftypefn + +function info = imfinfo (filename) + + if (nargin < 1) + print_usage (); + endif + + if (!ischar (filename)) + error ("imfinfo: filename must be a string") + endif + + filename = tilde_expand (filename); + + fn = file_in_path (IMAGE_PATH, filename); + if (isempty (fn)) + ## Couldn't find file. See if it's an URL. + tmp = tmpnam (); + + [fn, status, msg] = urlwrite (filename, tmp); + + if (! status) + error ("imfinfo: cannot find %s", filename); + endif + endif + + [statinfo, err, msg] = stat (fn); + if (err != 0) + error ("imfinfo: error reading '%s': %s", fn, msg); + endif + + time_stamp = strftime ("%e-%b-%Y %H:%M:%S", localtime (statinfo.mtime)); + + info = __magick_finfo__ (filename); + info.FileModDate = time_stamp; + +endfunction