davistang 发表于 2013-1-28 20:35:53

JAVA获取图片EXIF等综合信息并转化为JSON

1、图片模型,代码如下:
public class Picture {//文件信息-----------------------------private String filename;//文件名private String fileType;//文件类型private String mimeType;//文件格式private String fileSize;//文件大小private String fileDataTime;//时间戳private int    srcHeight;//图像高度(像素)private int    srcWidth;//图像宽度(像素)//图像信息-----------------------------    private String imageDescription;//图片说明    private String make;//制造商   private String model;//型号    private String orientation;//方向    private String xResolution;//水平分辨率    private String yResolution;//垂直分辨率    private String software;//创建软件    private String dateTime;//修改时间    private String artist;//作者    private String yCbCrPositioning;//YCbCr位置控制    private String copyright;//版权    private String copyrightOfPhotographer;//摄影版权    private String copyrightOfEditor;//编辑版权    //拍摄信息-----------------------------    private String exifVersion;//Exif版本    private String flashPixVersion;//FlashPix版本    private String dateTimeOriginal;//拍摄时间    private String dateTimeDigitized;//数字化时间    private String computedHeight;//拍摄分辨率高    private String computedWidth;//拍摄分辨率宽    private String apertureValue;//光圈    private String shutterSpeedValue;//快门速度    private String apertureFNumber;//快门光圈    private String maxApertureValue;//最大光圈值    private String exposureTime;//曝光时间    private String fNumber;//F-Number    private String meteringMode;//测光模式    private String lightSource;//光源    private String flash;//闪光灯    private String exposureMode;//曝光模式    private String whiteBalance;//白平衡    private String exposureProgram;//曝光程序    private String exposureBiasValue;//曝光补偿    private String isoSpeedRatings;//ISO感光度    private String componentsConfiguration;//分量配置    private String compressedBitsPerPixel;//ͼ图像压缩率    private String focusDistance;//对焦距离    private String focalLength;//焦距    private String focalLengthIn35mmFilm;//等价35mm焦距    private String userCommentEncoding;//用户注释编码    private String userComment;//用户注释    private String colorSpace;//色彩空间    private String exifImageLength;//Exif图像宽度    private String exifImageWidth;//Exif图像高度    private String fileSource;//文件来源    private String sceneType;//场景类型    private String thumbnailFileType;//缩略图文件格式    private String thumbnailMimeType;//缩略图Mime格式    public String getFilename() {return filename;}public void setFilename(String filename) {this.filename = filename;}public String getFileType() {return fileType;}public void setFileType(String fileType) {this.fileType = fileType;}public String getMimeType() {return mimeType;}public void setMimeType(String mimeType) {this.mimeType = mimeType;}public String getFileSize() {return fileSize;}public void setFileSize(String fileSize) {this.fileSize = fileSize;}public String getFileDataTime() {return fileDataTime;}public void setFileDataTime(String fileDataTime) {this.fileDataTime = fileDataTime;}public String getImageDescription() {return imageDescription;}public void setImageDescription(String imageDescription) {this.imageDescription = imageDescription;}public String getMake() {return make;}public void setMake(String make) {this.make = make;}public String getModel() {return model;}public void setModel(String model) {this.model = model;}public String getOrientation() {return orientation;}public void setOrientation(String orientation) {this.orientation = orientation;}public String getXResolution() {return xResolution;}public void setXResolution(String resolution) {xResolution = resolution;}public String getYResolution() {return yResolution;}public void setYResolution(String resolution) {yResolution = resolution;}public String getSoftware() {return software;}public void setSoftware(String software) {this.software = software;}public String getDateTime() {return dateTime;}public void setDateTime(String dateTime) {this.dateTime = dateTime;}public String getArtist() {return artist;}public void setArtist(String artist) {this.artist = artist;}public String getYCbCrPositioning() {return yCbCrPositioning;}public void setYCbCrPositioning(String cbCrPositioning) {yCbCrPositioning = cbCrPositioning;}public String getCopyright() {return copyright;}public void setCopyright(String copyright) {this.copyright = copyright;}public String getCopyrightOfPhotographer() {return copyrightOfPhotographer;}public void setCopyrightOfPhotographer(String copyrightOfPhotographer) {this.copyrightOfPhotographer = copyrightOfPhotographer;}public String getCopyrightOfEditor() {return copyrightOfEditor;}public void setCopyrightOfEditor(String copyrightOfEditor) {this.copyrightOfEditor = copyrightOfEditor;}public String getExifVersion() {return exifVersion;}public void setExifVersion(String exifVersion) {this.exifVersion = exifVersion;}public String getFlashPixVersion() {return flashPixVersion;}public void setFlashPixVersion(String flashPixVersion) {this.flashPixVersion = flashPixVersion;}public String getDateTimeOriginal() {return dateTimeOriginal;}public void setDateTimeOriginal(String dateTimeOriginal) {this.dateTimeOriginal = dateTimeOriginal;}public String getDateTimeDigitized() {return dateTimeDigitized;}public void setDateTimeDigitized(String dateTimeDigitized) {this.dateTimeDigitized = dateTimeDigitized;}public String getComputedHeight() {return computedHeight;}public void setComputedHeight(String computedHeight) {this.computedHeight = computedHeight;}public String getComputedWidth() {return computedWidth;}public void setComputedWidth(String computedWidth) {this.computedWidth = computedWidth;}public String getApertureValue() {return apertureValue;}public void setApertureValue(String apertureValue) {this.apertureValue = apertureValue;}public String getShutterSpeedValue() {return shutterSpeedValue;}public void setShutterSpeedValue(String shutterSpeedValue) {this.shutterSpeedValue = shutterSpeedValue;}public String getApertureFNumber() {return apertureFNumber;}public void setApertureFNumber(String apertureFNumber) {this.apertureFNumber = apertureFNumber;}public String getMaxApertureValue() {return maxApertureValue;}public void setMaxApertureValue(String maxApertureValue) {this.maxApertureValue = maxApertureValue;}public String getExposureTime() {return exposureTime;}public void setExposureTime(String exposureTime) {this.exposureTime = exposureTime;}public String getFNumber() {return fNumber;}public void setFNumber(String number) {fNumber = number;}public String getMeteringMode() {return meteringMode;}public void setMeteringMode(String meteringMode) {this.meteringMode = meteringMode;}public String getLightSource() {return lightSource;}public void setLightSource(String lightSource) {this.lightSource = lightSource;}public String getFlash() {return flash;}public void setFlash(String flash) {this.flash = flash;}public String getExposureMode() {return exposureMode;}public void setExposureMode(String exposureMode) {this.exposureMode = exposureMode;}public String getWhiteBalance() {return whiteBalance;}public void setWhiteBalance(String whiteBalance) {this.whiteBalance = whiteBalance;}public String getExposureProgram() {return exposureProgram;}public void setExposureProgram(String exposureProgram) {this.exposureProgram = exposureProgram;}public String getExposureBiasValue() {return exposureBiasValue;}public void setExposureBiasValue(String exposureBiasValue) {this.exposureBiasValue = exposureBiasValue;}public String getIsoSpeedRatings() {return isoSpeedRatings;}public void setIsoSpeedRatings(String isoSpeedRatings) {this.isoSpeedRatings = isoSpeedRatings;}public String getComponentsConfiguration() {return componentsConfiguration;}public void setComponentsConfiguration(String componentsConfiguration) {this.componentsConfiguration = componentsConfiguration;}public String getCompressedBitsPerPixel() {return compressedBitsPerPixel;}public void setCompressedBitsPerPixel(String compressedBitsPerPixel) {this.compressedBitsPerPixel = compressedBitsPerPixel;}public String getFocusDistance() {return focusDistance;}public void setFocusDistance(String focusDistance) {this.focusDistance = focusDistance;}public String getFocalLength() {return focalLength;}public void setFocalLength(String focalLength) {this.focalLength = focalLength;}public String getFocalLengthIn35mmFilm() {return focalLengthIn35mmFilm;}public void setFocalLengthIn35mmFilm(String focalLengthIn35mmFilm) {this.focalLengthIn35mmFilm = focalLengthIn35mmFilm;}public String getUserCommentEncoding() {return userCommentEncoding;}public void setUserCommentEncoding(String userCommentEncoding) {this.userCommentEncoding = userCommentEncoding;}public String getUserComment() {return userComment;}public void setUserComment(String userComment) {this.userComment = userComment;}public String getColorSpace() {return colorSpace;}public void setColorSpace(String colorSpace) {this.colorSpace = colorSpace;}public String getExifImageLength() {return exifImageLength;}public void setExifImageLength(String exifImageLength) {this.exifImageLength = exifImageLength;}public String getExifImageWidth() {return exifImageWidth;}public void setExifImageWidth(String exifImageWidth) {this.exifImageWidth = exifImageWidth;}public String getFileSource() {return fileSource;}public void setFileSource(String fileSource) {this.fileSource = fileSource;}public String getSceneType() {return sceneType;}public void setSceneType(String sceneType) {this.sceneType = sceneType;}public String getThumbnailFileType() {return thumbnailFileType;}public void setThumbnailFileType(String thumbnailFileType) {this.thumbnailFileType = thumbnailFileType;}public String getThumbnailMimeType() {return thumbnailMimeType;}public void setThumbnailMimeType(String thumbnailMimeType) {this.thumbnailMimeType = thumbnailMimeType;}public int getSrcHeight() {return srcHeight;}public void setSrcHeight(int srcHeight) {this.srcHeight = srcHeight;}public int getSrcWidth() {return srcWidth;}public void setSrcWidth(int srcWidth) {this.srcWidth = srcWidth;}} 2、图片解析Service,代码如下:
public class PicPraseService {private final static Log log = LogFactory.getLog(PicPraseService.class);/** * 解析图片,返回JSON格式字符串 ** @param 文件 * @return JSON字符串 */public String prase2JSON(File file) {Picture picture = getPicture(file);if (picture != null) {JSONObject jsonObject = JSONObject.fromObject(picture);JSONObject j = new JSONObject();j.put("data", jsonObject);// 返回错误代码0,即正常返回j.put("error", "0");return j.toString();} else {// 返回错误代码1,即无返回结果return "{'data':{},'error':'1'}";}}/** * 返回封装EXIF等信息的Picture对象 ** @param 文件 * @return Picture对象 */public Picture getPicture(File jpegFile) {Picture picture = new Picture();if (jpegFile.exists()) {      // 文件信息 -----------------------------// 获取文件大小,beginString fileSize = "";RandomAccessFile raFile = null;try {raFile = new RandomAccessFile(jpegFile, "r");fileSize = raFile.length() + "";} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{if(raFile != null){try {raFile.close();} catch (IOException e) {e.printStackTrace();}}}// 获取文件大小,end// 获取图片类型,beginString fileType = "";ImageInputStream iis = null;try {iis = ImageIO.createImageInputStream(jpegFile);Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);ImageReader reader = iter.next();fileType = reader.getFormatName();} catch (IOException e1) {e1.printStackTrace();}finally{if(iis != null){try {iis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}// 获取图片类型,end// 获取图片MIME类型,beginMimetypesFileTypeMap mftm = new MimetypesFileTypeMap();String mimeType = mftm.getContentType(jpegFile);// 文件格式// 获取图片MIME类型,endint srcHeight = 0;//图像高度(像素)int srcWidth = 0;//图像宽度(像素)try {BufferedImage bufferedImage = ImageIO.read(jpegFile);   srcWidth = bufferedImage.getWidth();   srcHeight = bufferedImage.getHeight();} catch (IOException e) {e.printStackTrace();} String filename = jpegFile.getName();// 文件名String fileDataTime = "";// 时间戳// 图像信息 -----------------------------String imageDescription = "";String make = "";String model = "";String orientation = "";String xResolution = "";String yResolution = "";String software = "";String dateTime = "";String artist = "";String yCbCrPositioning = "";String copyright = "";String copyrightOfPhotographer = "";String copyrightOfEditor = ""; // 拍摄信息 -----------------------------String exifVersion = "";String flashPixVersion = "";String dateTimeOriginal = "";String dateTimeDigitized = "";String computedHeight = "";String computedWidth = "";String apertureValue = "";String shutterSpeedValue = "";String apertureFNumber = "";String maxApertureValue = "";String exposureTime = "";String fNumber = "";String meteringMode = "";String lightSource = "";String flash = "";String exposureMode = "";String whiteBalance = "";String exposureProgram = "";String exposureBiasValue = "";String isoSpeedRatings = "";String componentsConfiguration = "";String compressedBitsPerPixel = "";String focusDistance = "";String focalLength = "";String focalLengthIn35mmFilm = "";String userCommentEncoding = "";String userComment = "";String colorSpace = "";String exifImageLength = "";String exifImageWidth = "";String fileSource = "";String sceneType = "";String thumbnailFileType = "";String thumbnailMimeType = "";try {            // 第三方类库,获取图片EXIF信息Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);Directory exif = metadata.getDirectory(ExifDirectory.class);fileDataTime = exif.getDescription(ExifDirectory.TAG_DATETIME);imageDescription = exif.getDescription(ExifDirectory.TAG_IMAGE_DESCRIPTION);make = exif.getDescription(ExifDirectory.TAG_MAKE);model = exif.getDescription(ExifDirectory.TAG_MODEL);orientation = exif.getDescription(ExifDirectory.TAG_ORIENTATION);xResolution = exif.getDescription(ExifDirectory.TAG_X_RESOLUTION);yResolution = exif.getDescription(ExifDirectory.TAG_Y_RESOLUTION);software = exif.getDescription(ExifDirectory.TAG_SOFTWARE);dateTime = exif.getDescription(ExifDirectory.TAG_DATETIME);artist = exif.getDescription(ExifDirectory.TAG_ARTIST);yCbCrPositioning = exif.getDescription(ExifDirectory.TAG_YCBCR_POSITIONING);copyright = exif.getDescription(ExifDirectory.TAG_COPYRIGHT);copyrightOfPhotographer = "";copyrightOfEditor = "";exifVersion = exif.getDescription(ExifDirectory.TAG_EXIF_VERSION);flashPixVersion = exif.getDescription(ExifDirectory.TAG_FLASHPIX_VERSION);dateTimeOriginal = exif.getDescription(ExifDirectory.TAG_DATETIME_ORIGINAL);dateTimeDigitized = exif.getDescription(ExifDirectory.TAG_DATETIME_ORIGINAL);computedHeight = "";computedWidth = "";apertureValue = exif.getDescription(ExifDirectory.TAG_APERTURE);shutterSpeedValue = exif.getDescription(ExifDirectory.TAG_SHUTTER_SPEED);apertureFNumber = "";maxApertureValue = exif.getDescription(ExifDirectory.TAG_MAX_APERTURE);exposureTime = exif.getDescription(ExifDirectory.TAG_EXPOSURE_TIME);fNumber = exif.getDescription(ExifDirectory.TAG_FNUMBER);meteringMode = exif.getDescription(ExifDirectory.TAG_METERING_MODE);lightSource = exif.getDescription(ExifDirectory.TAG_LIGHT_SOURCE);flash = exif.getDescription(ExifDirectory.TAG_FLASH);exposureMode = exif.getDescription(ExifDirectory.TAG_EXPOSURE_MODE);whiteBalance = exif.getDescription(ExifDirectory.TAG_WHITE_BALANCE);exposureProgram = exif.getDescription(ExifDirectory.TAG_EXPOSURE_PROGRAM);exposureBiasValue = exif.getDescription(ExifDirectory.TAG_EXPOSURE_BIAS);isoSpeedRatings = exif.getDescription(ExifDirectory.TAG_ISO_EQUIVALENT);componentsConfiguration = exif.getDescription(ExifDirectory.TAG_COMPONENTS_CONFIGURATION);compressedBitsPerPixel = "";focusDistance = exif.getDescription(ExifDirectory.TAG_SUBJECT_DISTANCE);focalLength = exif.getDescription(ExifDirectory.TAG_FOCAL_LENGTH);focalLengthIn35mmFilm = exif.getDescription(ExifDirectory.TAG_35MM_FILM_EQUIV_FOCAL_LENGTH);userCommentEncoding = "";userComment = exif.getDescription(ExifDirectory.TAG_USER_COMMENT);colorSpace = exif.getDescription(ExifDirectory.TAG_COLOR_SPACE);exifImageLength = exif.getDescription(ExifDirectory.TAG_EXIF_IMAGE_WIDTH);exifImageWidth = exif.getDescription(ExifDirectory.TAG_EXIF_IMAGE_HEIGHT);fileSource = exif.getDescription(ExifDirectory.TAG_FILE_SOURCE);sceneType = exif.getDescription(ExifDirectory.TAG_SCENE_TYPE);thumbnailFileType = "";thumbnailMimeType = "";} catch (JpegProcessingException e2) {e2.printStackTrace();} catch (MetadataException e2) {e2.printStackTrace();}picture.setApertureFNumber(apertureFNumber == null ? "": apertureFNumber);picture.setApertureValue(apertureValue == null ? "": apertureValue);picture.setArtist(artist == null ? "" : artist);picture.setColorSpace(colorSpace == null ? "" : colorSpace);picture.setComponentsConfiguration(componentsConfiguration == null ? "": componentsConfiguration);picture.setCompressedBitsPerPixel(compressedBitsPerPixel == null ? "": compressedBitsPerPixel);picture.setComputedHeight(computedHeight == null ? "": computedHeight);picture.setComputedWidth(computedWidth == null ? "": computedWidth);picture.setCopyright(copyright == null ? "" : copyright);picture.setCopyrightOfEditor(copyrightOfEditor == null ? "": copyrightOfEditor);picture.setCopyrightOfPhotographer(copyrightOfPhotographer == null ? "": copyrightOfPhotographer);picture.setDateTime(dateTime == null ? "" : dateTime);picture.setDateTimeDigitized(dateTimeDigitized == null ? "": dateTimeDigitized);picture.setDateTimeOriginal(dateTimeOriginal == null ? "": dateTimeOriginal);picture.setExifImageLength(exifImageLength == null ? "": exifImageLength);picture.setExifImageWidth(exifImageWidth == null ? "": exifImageWidth);picture.setExifVersion(exifVersion == null ? "" : exifVersion);picture.setExposureBiasValue(exposureBiasValue == null ? "": exposureBiasValue);picture.setExposureMode(exposureMode == null ? "" : exposureMode);picture.setExposureProgram(exposureProgram == null ? "": exposureProgram);picture.setExposureTime(exposureTime == null ? "" : exposureTime);picture.setFileDataTime(fileDataTime == null ? "" : fileDataTime);picture.setFilename(filename);picture.setFileSize(fileSize == null ? "" : fileSize);picture.setFileSource(fileSource == null ? "" : fileSource);picture.setFileType(fileType == null ? "" : fileType);picture.setFlash(flash == null ? "" : flash);picture.setFlashPixVersion(flashPixVersion == null ? "": flashPixVersion);picture.setFNumber(fNumber == null ? "" : fNumber);picture.setFocalLength(focalLength == null ? "" : focalLength);picture.setFocalLengthIn35mmFilm(focalLengthIn35mmFilm == null ? "": focalLengthIn35mmFilm);picture.setFocusDistance(focusDistance == null ? "": focusDistance);picture.setImageDescription(imageDescription == null ? "": imageDescription);picture.setIsoSpeedRatings(isoSpeedRatings == null ? "": isoSpeedRatings);picture.setLightSource(lightSource == null ? "" : lightSource);picture.setMake(make == null ? "" : make);picture.setMaxApertureValue(maxApertureValue == null ? "": maxApertureValue);picture.setMeteringMode(meteringMode == null ? "" : meteringMode);picture.setMimeType(mimeType == null ? "" : mimeType);picture.setModel(model == null ? "" : model);picture.setOrientation(orientation == null ? "" : orientation);picture.setSceneType(sceneType == null ? "" : sceneType);picture.setShutterSpeedValue(shutterSpeedValue == null ? "": shutterSpeedValue);picture.setSoftware(software == null ? "" : software);picture.setThumbnailFileType(thumbnailFileType == null ? "": thumbnailFileType);picture.setThumbnailMimeType(thumbnailMimeType == null ? "": thumbnailMimeType);picture.setUserComment(userComment == null ? "" : userComment);picture.setUserCommentEncoding(userCommentEncoding == null ? "": userCommentEncoding);picture.setWhiteBalance(whiteBalance == null ? "" : whiteBalance);picture.setXResolution(xResolution == null ? "" : xResolution);picture.setYCbCrPositioning(yCbCrPositioning == null ? "": yCbCrPositioning);picture.setYResolution(yResolution == null ? "" : yResolution);picture.setSrcHeight(srcHeight);picture.setSrcWidth(srcWidth);} else {return null;}return picture;}}    部分信息暂未找到获取方式,以""代替。
3、所需jar见附件。
 
页: [1]
查看完整版本: JAVA获取图片EXIF等综合信息并转化为JSON