public class ImageMetadata extends Object
Use the class like this:
ImageMetadata ii = new ImageMetadata(); ii.setInput(in); // in can be InputStream or RandomAccessFile ii.setDetermineImageNumber(true); // default is false ii.setCollectComments(true); // default is false if (!ii.check()) { System.err.println("Not a supported image file format."); return; } System.out.println(ii.getFormatName() + ", " + ii.getMimeType() + ", " + ii.getWidth() + " x " + ii.getHeight() + " pixels, " + ii.getBitsPerPixel() + " bits per pixel, " + ii.getNumberOfImages() + " image(s), " + ii.getNumberOfComments() + " comment(s)."); // there are other properties, check out the API documentationYou can also use this class as a command line program. Call it with a number of image file names and URLs as parameters:
java ImageMetadata *.jpg *.png *.gif http://somesite.tld/image.jpgor call it without parameters and pipe data to it:
java ImageMetadata < image.jpg
Known limitations:
Requirements:
The latest version can be found at http://schmidt.devlib.org/image-info/.
Written by Marco Schmidt.
This class is contributed to the Public Domain. Use it at your own risk.
setDetermineImageNumber(boolean)
with true
as argument to identify animated GIFs (getNumberOfImages()
will return a value larger than 1
).setCollectComments(boolean)
. That new method lets the user specify whether
textual comments are to be stored in an internal list when encountered in an input image file / stream. Added two methods to
return the physical width and height of the image in dpi: getPhysicalWidthDpi()
and getPhysicalHeightDpi()
.
If the physical resolution could not be retrieved, these methods return -1
.isProgressive()
returns whether ImageMetadata has found that the storage type is progressive (or interlaced). Thanks
to Joe Germuska for suggesting the feature. Bug fix: BMP physical resolution is now correctly determined. Released as 1.5.Vector<String>
, and removed any unnecessary
casting. Also removed the unnecessary else statements where the previous block ended in a return. Also renamed to
ImageMetadata
.
Modifier and Type | Field and Description |
---|---|
static int |
FORMAT_BMP
Return value of
getFormat() for BMP streams. |
static int |
FORMAT_GIF
Return value of
getFormat() for GIF streams. |
static int |
FORMAT_IFF
Return value of
getFormat() for IFF streams. |
static int |
FORMAT_JPEG
Return value of
getFormat() for JPEG streams. |
static int |
FORMAT_PBM
Return value of
getFormat() for PBM streams. |
static int |
FORMAT_PCX
Return value of
getFormat() for PCX streams. |
static int |
FORMAT_PGM
Return value of
getFormat() for PGM streams. |
static int |
FORMAT_PNG
Return value of
getFormat() for PNG streams. |
static int |
FORMAT_PPM
Return value of
getFormat() for PPM streams. |
static int |
FORMAT_PSD
Return value of
getFormat() for PSD streams. |
static int |
FORMAT_RAS
Return value of
getFormat() for RAS streams. |
Constructor and Description |
---|
ImageMetadata() |
Modifier and Type | Method and Description |
---|---|
boolean |
check()
Call this method after you have provided an input stream or file using
setInput(InputStream) or
setInput(DataInput) . |
int |
getBitsPerPixel()
If
check() was successful, returns the image's number of bits per pixel. |
String |
getComment(int index)
Returns the index'th comment retrieved from the file.
|
int |
getFormat()
If
check() was successful, returns the image format as one of the FORMAT_xyz constants from this class. |
String |
getFormatName()
If
check() was successful, returns the image format's name. |
int |
getHeight()
If
check() was successful, returns one the image's vertical resolution in pixels. |
String |
getMimeType()
If
check() was successful, returns a String with the MIME type of the format. |
int |
getNumberOfComments()
If
check() was successful and setCollectComments(boolean) was called with true as argument,
returns the number of comments retrieved from the input image stream / file. |
int |
getNumberOfImages()
Returns the number of images in the examined file.
|
int |
getPhysicalHeightDpi()
Returns the physical height of this image in dots per inch (dpi).
|
float |
getPhysicalHeightInch()
If
check() was successful, returns the physical width of this image in dpi (dots per inch) or -1 if no value could
be found. |
int |
getPhysicalWidthDpi()
If
check() was successful, returns the physical width of this image in dpi (dots per inch) or -1 if no value could
be found. |
float |
getPhysicalWidthInch()
Returns the physical width of an image in inches, or
-1.0f if width information is not available. |
int |
getWidth()
If
check() was successful, returns one the image's horizontal resolution in pixels. |
boolean |
isProgressive()
Returns whether the image is stored in a progressive (also called: interlaced) way.
|
static void |
main(String[] args)
To use this class as a command line application, give it either some file names as parameters (information on them will be
printed to standard output, one line per file) or call it with no parameters.
|
void |
setCollectComments(boolean newValue)
Specify whether textual comments are supposed to be extracted from input.
|
void |
setDetermineImageNumber(boolean newValue)
Specify whether the number of images in a file is to be determined - default is
false . |
void |
setInput(DataInput dataInput)
Set the input stream to the argument stream (or file).
|
void |
setInput(InputStream inputStream)
Set the input stream to the argument stream (or file).
|
public static final int FORMAT_JPEG
getFormat()
for JPEG streams. ImageMetadata can extract physical resolution and comments from
JPEGs (only from APP0 headers). Only one image can be stored in a file. It is determined whether the JPEG stream is
progressive (see isProgressive()
).public static final int FORMAT_GIF
getFormat()
for GIF streams. ImageMetadata can extract comments from GIFs and count the number of
images (GIFs with more than one image are animations). It is determined whether the GIF stream is interlaced (see
isProgressive()
).public static final int FORMAT_PNG
getFormat()
for PNG streams. PNG only supports one image per file. Both physical resolution and
comments can be stored with PNG, but ImageMetadata is currently not able to extract those. It is determined whether the PNG
stream is interlaced (see isProgressive()
).public static final int FORMAT_BMP
getFormat()
for BMP streams. BMP only supports one image per file. BMP does not allow for
comments. The physical resolution can be stored.public static final int FORMAT_PCX
getFormat()
for PCX streams. PCX does not allow for comments or more than one image per file.
However, the physical resolution can be stored.public static final int FORMAT_IFF
getFormat()
for IFF streams.public static final int FORMAT_RAS
getFormat()
for RAS streams. Sun Raster allows for one image per file only and is not able to
store physical resolution or comments.public static final int FORMAT_PBM
getFormat()
for PBM streams.public static final int FORMAT_PGM
getFormat()
for PGM streams.public static final int FORMAT_PPM
getFormat()
for PPM streams.public static final int FORMAT_PSD
getFormat()
for PSD streams.public boolean check()
setInput(InputStream)
or
setInput(DataInput)
. If true is returned, the file format was known and information on the file's content can be
retrieved using the various getXyz methods.public int getBitsPerPixel()
check()
was successful, returns the image's number of bits per pixel. Does not include transparency information
like the alpha channel.public String getComment(int index)
index
- int index of comment to returnIllegalArgumentException
- if index is smaller than 0 or larger than or equal to the number of comments retrievedgetNumberOfComments()
public int getFormat()
check()
was successful, returns the image format as one of the FORMAT_xyz constants from this class. Use
getFormatName()
to get a textual description of the file format.public String getFormatName()
check()
was successful, returns the image format's name. Use getFormat()
to get a unique number.public int getHeight()
check()
was successful, returns one the image's vertical resolution in pixels.public String getMimeType()
check()
was successful, returns a String with the MIME type of the format.image/jpeg
public int getNumberOfComments()
check()
was successful and setCollectComments(boolean)
was called with true
as argument,
returns the number of comments retrieved from the input image stream / file. Any number >= 0 and smaller than this
number of comments is then a valid argument for the getComment(int)
method.public int getNumberOfImages()
setDetermineImageNumber(true);
was called
before a successful call to check()
. This value can currently be only different from 1
for GIF
images.public int getPhysicalHeightDpi()
check()
was successful. Returns
-1
on failure.getPhysicalWidthDpi()
,
getPhysicalHeightInch()
public float getPhysicalHeightInch()
check()
was successful, returns the physical width of this image in dpi (dots per inch) or -1 if no value could
be found.getPhysicalHeightDpi()
,
getPhysicalWidthDpi()
,
getPhysicalWidthInch()
public int getPhysicalWidthDpi()
check()
was successful, returns the physical width of this image in dpi (dots per inch) or -1 if no value could
be found.getPhysicalHeightDpi()
,
getPhysicalWidthInch()
,
getPhysicalHeightInch()
public float getPhysicalWidthInch()
-1.0f
if width information is not available. Assumes that
check()
has been called successfully.-1.0f
on failuregetPhysicalWidthDpi()
,
getPhysicalHeightInch()
public int getWidth()
check()
was successful, returns one the image's horizontal resolution in pixels.public boolean isProgressive()
public static void main(String[] args)
args
- the program arguments which must be file namespublic void setCollectComments(boolean newValue)
false
. If enabled,
comments will be added to an internal list.newValue
- if true
, this class will read commentsgetNumberOfComments()
,
getComment(int)
public void setDetermineImageNumber(boolean newValue)
false
. This is a special
option because some file formats require running over the entire file to find out the number of images, a rather
time-consuming task. Not all file formats support more than one image. If this method is called with true
as
argument, the actual number of images can be queried via getNumberOfImages()
after a successful call to
check()
.newValue
- will the number of images be determined?getNumberOfImages()
public void setInput(DataInput dataInput)
RandomAccessFile
implements
DataInput
.dataInput
- the input stream to read frompublic void setInput(InputStream inputStream)
inputStream
- the input stream to read fromCopyright © 2008–2016 JBoss, a division of Red Hat. All rights reserved.