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()) {
        // 文件信息 -----------------------------
			// 获取文件大小,begin
			String 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

			// 获取图片类型,begin
			String 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 block
						e.printStackTrace();
					}
				}
			}
			// 获取图片类型,end

			// 获取图片MIME类型,begin
			MimetypesFileTypeMap mftm = new MimetypesFileTypeMap();
			String mimeType = mftm.getContentType(jpegFile);// 文件格式
			// 获取图片MIME类型,end
			
			int 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见附件。

 

你可能感兴趣的:(java,json,制造,Flash,IIS)