From e686a42b89aaa6e4286833a361066e7d372522ce Mon Sep 17 00:00:00 2001 From: Hung-ying Tyan Date: Fri, 19 Oct 2012 20:50:50 +0800 Subject: Move new exif lib to gallerycommon. https://googleplex-android-review.googlesource.com/#/c/242047 depends on this. Bug: 6667860 Change-Id: Iac937e2eea94f0f5ffde876235b1c2ee748e7570 --- .../src/com/android/gallery3d/exif/ExifReader.java | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 gallerycommon/src/com/android/gallery3d/exif/ExifReader.java (limited to 'gallerycommon/src/com/android/gallery3d/exif/ExifReader.java') diff --git a/gallerycommon/src/com/android/gallery3d/exif/ExifReader.java b/gallerycommon/src/com/android/gallery3d/exif/ExifReader.java new file mode 100644 index 000000000..d8083b2dd --- /dev/null +++ b/gallerycommon/src/com/android/gallery3d/exif/ExifReader.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.gallery3d.exif; + +import java.io.IOException; +import java.io.InputStream; + +/** + * This class reads the EXIF header of a JPEG file and stores it in {@link ExifData}. + */ +public class ExifReader { + /** + * Parses the inputStream and and returns the EXIF data in an {@link ExifData}. + * @throws ExifInvalidFormatException + * @throws IOException + */ + public ExifData read(InputStream inputStream) throws ExifInvalidFormatException, + IOException { + ExifParser parser = ExifParser.parse(inputStream); + ExifData exifData = new ExifData(parser.getByteOrder()); + + int event = parser.next(); + while (event != ExifParser.EVENT_END) { + switch (event) { + case ExifParser.EVENT_START_OF_IFD: + exifData.addIfdData(new IfdData(parser.getCurrentIfd())); + break; + case ExifParser.EVENT_NEW_TAG: + ExifTag tag = parser.getTag(); + if (!tag.hasValue()) { + parser.registerForTagValue(tag); + } else { + exifData.getIfdData(tag.getIfd()).setTag(tag); + } + break; + case ExifParser.EVENT_VALUE_OF_REGISTERED_TAG: + tag = parser.getTag(); + if (tag.getDataType() == ExifTag.TYPE_UNDEFINED) { + byte[] buf = new byte[tag.getComponentCount()]; + parser.read(buf); + tag.setValue(buf); + } + exifData.getIfdData(tag.getIfd()).setTag(tag); + break; + case ExifParser.EVENT_COMPRESSED_IMAGE: + byte buf[] = new byte[parser.getCompressedImageSize()]; + parser.read(buf); + exifData.setCompressedThumbnail(buf); + break; + case ExifParser.EVENT_UNCOMPRESSED_STRIP: + buf = new byte[parser.getStripSize()]; + parser.read(buf); + exifData.setStripBytes(parser.getStripIndex(), buf); + break; + } + event = parser.next(); + } + return exifData; + } +} \ No newline at end of file -- cgit v1.2.3