package cn.jcenterhome.util;
import java.awt.Image;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import com.drew.imaging.jpeg.JpegProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import com.drew.metadata.exif.ExifDirectory;
import com.drew.metadata.exif.ExifReader;
public class ExifUtil {
public static Map<String, Object> getExif(HttpServletRequest request, String img) {
LinkedHashMap<String, Object> imgInfo = new LinkedHashMap<String, Object>();
File picFile = new File(JavaCenterHome.jchRoot + img);
if (picFile.isFile()) {
try {
ExifReader er = new ExifReader(picFile);
Metadata metadata = er.extract();
Directory exif = metadata.getDirectory(ExifDirectory.class);
if (exif.getTagCount() > 0) {
imgInfo.put(Common.getMessage(request, "FileName"), picFile.getName());
imgInfo.put(Common.getMessage(request, "FileType"), "JPG");
imgInfo.put(Common.getMessage(request, "MimeType"), "image/jpeg");
imgInfo.put(Common.getMessage(request, "FileSize"), picFile.length());
imgInfo.put(Common.getMessage(request, "FileDateTime"), Common.gmdate(
"yyyy-MM-dd HH:mm:ss", (int) (picFile.lastModified() / 1000), Common
.getTimeOffset((Map<String, Object>) request.getAttribute("sGlobal"),
(Map<String, Object>) request.getAttribute("sConfig"))));
Image image = ImageIO.read(picFile);
imgInfo.put(Common.getMessage(request, "ImageDescription"), exif
.getDescription(ExifDirectory.TAG_IMAGE_DESCRIPTION));
imgInfo.put(Common.getMessage(request, "Artist"), exif
.getString(ExifDirectory.TAG_ARTIST));
imgInfo.put(Common.getMessage(request, "Copyright"), exif
.getDescription(ExifDirectory.TAG_COPYRIGHT));
imgInfo.put(Common.getMessage(request, "ImageHeight"), image.getHeight(null));
imgInfo.put(Common.getMessage(request, "ImageWidth"), image.getWidth(null));
imgInfo.put(Common.getMessage(request, "UserComment"), exif
.getDescription(ExifDirectory.TAG_USER_COMMENT));
imgInfo.put(Common.getMessage(request, "Make"), exif.getString(ExifDirectory.TAG_MAKE));
imgInfo.put(Common.getMessage(request, "Model"), exif.getString(ExifDirectory.TAG_MODEL));
imgInfo.put(Common.getMessage(request, "Orientation"), exif
.getDescription(ExifDirectory.TAG_ORIENTATION));
imgInfo.put(Common.getMessage(request, "XResolution"), exif
.getString(ExifDirectory.TAG_X_RESOLUTION));
imgInfo.put(Common.getMessage(request, "YResolution"), exif
.getString(ExifDirectory.TAG_Y_RESOLUTION));
String resolutionUnit = exif.getString(ExifDirectory.TAG_RESOLUTION_UNIT);
imgInfo.put(Common.getMessage(request, "ResolutionUnit"), Common.getMessage(request,
"ResolutionUnit_" + (resolutionUnit == null ? 0 : resolutionUnit)));
imgInfo.put(Common.getMessage(request, "Software"), exif
.getString(ExifDirectory.TAG_SOFTWARE));
imgInfo.put(Common.getMessage(request, "DateTime"), exif
.getString(ExifDirectory.TAG_DATETIME));
imgInfo.put(Common.getMessage(request, "YCbCrPositioning"), exif
.getDescription(ExifDirectory.TAG_YCBCR_POSITIONING));
imgInfo.put(Common.getMessage(request, "ExposureTime"), exif
.getDescription(ExifDirectory.TAG_EXPOSURE_TIME));
String exposureProgram = exif.getString(ExifDirectory.TAG_EXPOSURE_PROGRAM);
imgInfo.put(Common.getMessage(request, "ExposureProgram"), Common.getMessage(request,
"ExposureProgram_" + (exposureProgram == null ? 0 : exposureProgram)));
imgInfo.put(Common.getMessage(request, "FNumber"), exif
.getDescription(ExifDirectory.TAG_FNUMBER));
imgInfo.put(Common.getMessage(request, "ISOSpeedRatings"), exif
.getString(ExifDirectory.TAG_ISO_EQUIVALENT));
imgInfo.put(Common.getMessage(request, "ComponentsConfiguration"), "1 2 3 0".equals(exif
.getString(ExifDirectory.TAG_COMPONENTS_CONFIGURATION)) ? "YCbCr" : "RGB");
imgInfo.put(Common.getMessage(request, "DateTimeOriginal"), exif
.getDescription(ExifDirectory.TAG_DATETIME_ORIGINAL));
imgInfo.put(Common.getMessage(request, "DateTimeDigitized"), exif
.getDescription(ExifDirectory.TAG_DATETIME_DIGITIZED));
imgInfo.put(Common.getMessage(request, "CompressedBitsPerPixel"), exif
.getDescription(ExifDirectory.TAG_COMPRESSION_LEVEL));
imgInfo.put(Common.getMessage(request, "ShutterSpeedValue"), exif
.getDescription(ExifDirectory.TAG_SHUTTER_SPEED));
imgInfo.put(Common.getMessage(request, "ApertureValue"), exif
.getDescription(ExifDirectory.TAG_APERTURE));
imgInfo.put(Common.getMessage(request, "BrightnessValue"), exif
.getDescription(ExifDirectory.TAG_BRIGHTNESS_VALUE));
imgInfo.put(Common.getMessage(request, "ExposureBiasValue"), exif
.getDescription(ExifDirectory.TAG_EXPOSURE_BIAS));
imgInfo.put(Common.getMessage(request, "MaxApertureValue"), exif
.getDescription(ExifDirectory.TAG_MAX_APERTURE));
imgInfo.put(Common.getMessage(request, "SubjectDistance"), exif
.getDescription(ExifDirectory.TAG_SUBJECT_DISTANCE));
String meteringMode = exif.getString(ExifDirectory.TAG_METERING_MODE);
imgInfo.put(Common.getMessage(request, "MeteringMode"), Common.getMessage(request,
"MeteringMode_" + (meteringMode == null ? 0 : meteringMode)));
String lightSource = exif.getString(ExifDirectory.TAG_LIGHT_SOURCE);
imgInfo.put(Common.getMessage(request, "LightSource"), Common.getMessage(request,
"LightSource_" + (lightSource == null ? 0 : lightSource)));
imgInfo.put(Common.getMessage(request, "Flash"), exif
.getDescription(ExifDirectory.TAG_FLASH));
String focalLength = exif.getString(ExifDirectory.TAG_FOCAL_LENGTH);
if (focalLength != null) {
imgInfo.put(Common.getMessage(request, "FocalLength"), exif
.getString(ExifDirectory.TAG_FOCAL_LENGTH)
+ " mm");
}
String FocalLengthIn35mmFilm = exif
.getString(ExifDirectory.TAG_35MM_FILM_EQUIV_FOCAL_LENGTH);
if (FocalLengthIn35mmFilm != null) {
imgInfo.put(Common.getMessage(request, "FocalLengthIn35mmFilm"),
FocalLengthIn35mmFilm + " mm");
}
imgInfo.put(Common.getMessage(request, "ColorSpace"), exif
.getDescription(ExifDirectory.TAG_COLOR_SPACE));
imgInfo.put(Common.getMessage(request, "ExifImageHeight"), exif
.getString(ExifDirectory.TAG_EXIF_IMAGE_HEIGHT));
imgInfo.put(Common.getMessage(request, "ExifImageWidth"), exif
.getString(ExifDirectory.TAG_EXIF_IMAGE_WIDTH));
imgInfo.put(Common.getMessage(request, "ExposureIndex"), exif
.getDescription(ExifDirectory.TAG_EXPOSURE_INDEX));
imgInfo.put(Common.getMessage(request, "SensingMethod"), exif
.getDescription(ExifDirectory.TAG_SENSING_METHOD));
imgInfo.put(Common.getMessage(request, "SceneType"), exif
.getDescription(ExifDirectory.TAG_SCENE_TYPE));
imgInfo.put(Common.getMessage(request, "ExposureMode"), Common.getMessage(request, "1"
.equals(exif.getString(ExifDirectory.TAG_EXPOSURE_MODE)) ? "manual" : "auto"));
imgInfo.put(Common.getMessage(request, "WhiteBalance"), Common.getMessage(request, "1"
.equals(exif.getString(ExifDirectory.TAG_WHITE_BALANCE)) ? "manual" : "auto"));
imgInfo.put(Common.getMessage(request, "DigitalZoomRatio"), exif
.getDescription(ExifDirectory.TAG_DIGITAL_ZOOM_RATIO));
imgInfo.put(Common.getMessage(request, "SceneCaptureType"), exif
.getDescription(ExifDirectory.TAG_SCENE_CAPTURE_TYPE));
imgInfo.put(Common.getMessage(request, "GainControl"), exif
.getDescription(ExifDirectory.TAG_GAIN_CONTROL));
imgInfo.put(Common.getMessage(request, "Contrast"), exif
.getDescription(ExifDirectory.TAG_CONTRAST));
imgInfo.put(Common.getMessage(request, "Saturation"), exif
.getDescription(ExifDirectory.TAG_SATURATION));
imgInfo.put(Common.getMessage(request, "Sharpness"), exif
.getDescription(ExifDirectory.TAG_SHARPNESS));
imgInfo.put(Common.getMessage(request, "SubjectDistanceRange"), exif
.getDescription(ExifDirectory.TAG_SUBJECT_DISTANCE_RANGE));
imgInfo.put(Common.getMessage(request, "ExifVersion"), exif
.getDescription(ExifDirectory.TAG_EXIF_VERSION));
String flashPixVersion = exif.getDescription(ExifDirectory.TAG_FLASHPIX_VERSION);
imgInfo.put(Common.getMessage(request, "FlashPixVersion"), "Ver. "
+ (flashPixVersion == null ? "0.00" : flashPixVersion));
imgInfo.put(Common.getMessage(request, "FileSource"), exif
.getDescription(ExifDirectory.TAG_FILE_SOURCE));
}
} catch (Exception e) {
}
}
if (imgInfo.isEmpty()) {
imgInfo.put(Common.getMessage(request, "img_info_key"), Common.getMessage(request,
"img_info_value"));
}
return imgInfo;
}
public static void main(String args[]) throws FileNotFoundException {
File f = new File("d:\\1_1259808211kXVh.jpg");
try {
ExifReader er = new ExifReader(f);
Metadata exif = er.extract();
Directory directory = exif.getDirectory(ExifDirectory.class);
if (directory.getTagCount() > 0) {
Iterator tags = directory.getTagIterator();
while (tags.hasNext()) {
Tag tag = (Tag) tags.next();
System.out.println(tag);
}
if (directory.hasErrors()) {
Iterator errors = directory.getErrors();
while (errors.hasNext()) {
System.out.println("ERROR: " + errors.next());
}
}
}
} catch (JpegProcessingException e) {
System.err.println("not jpeg file");
}
}
}