/** * Clears this ExifInterface object's existing exif tags. */ public void clearExif() { mData = new ExifData( DEFAULT_BYTE_ORDER ); }
/** * Puts an ExifTag into this ExifInterface object's tags, removing a * previous ExifTag with the same TID and IFD. The IFD it is put into will * be the one the tag was created with in {@link #buildTag}. * * @param tag an ExifTag to put into this ExifInterface's tags. * @return the previous ExifTag with the same TID and IFD or null if none * exists. */ public ExifTag setTag( ExifTag tag ) { return mData.addTag( tag ); }
/** * Sets the thumbnail to be a jpeg compressed image. Clears any prior * thumbnail. * * @param thumb a byte array containing a jpeg compressed image. * @return true if the thumbnail was set. */ public boolean setCompressedThumbnail( byte[] thumb ) { mData.clearThumbnailAndStrips(); mData.setCompressedThumbnail( thumb ); return true; }
/** * Returns the thumbnail from IFD1 as a byte array, or null if none exists. * The bytes may either be an uncompressed strip as specified in the exif * standard or a jpeg compressed image. * * @return the thumbnail as a byte array. */ @SuppressWarnings( "unused" ) public byte[] getThumbnailBytes() { if( mData.hasCompressedThumbnail() ) { return mData.getCompressedThumbnail(); } else if( mData.hasUncompressedStrip() ) { // TODO: implement this } return null; }
private void writeThumbnail( OrderedDataOutputStream dataOutputStream ) throws IOException { if( mExifData.hasCompressedThumbnail() ) { Log.d( TAG, "writing thumbnail.." ); dataOutputStream.write( mExifData.getCompressedThumbnail() ); } else if( mExifData.hasUncompressedStrip() ) { Log.d( TAG, "writing uncompressed strip.." ); for( int i = 0; i < mExifData.getStripCount(); i++ ) { dataOutputStream.write( mExifData.getStrip( i ) ); } } }
ExifData exifData = new ExifData( parser.getByteOrder() ); exifData.setSections( parser.getSections() ); exifData.mUncompressedDataPosition = parser.getUncompressedDataPosition(); exifData.setQualityGuess( parser.getQualityGuess() ); exifData.setJpegProcess( parser.getJpegProcess() ); exifData.setImageSize( w, h ); switch( event ) { case ExifParser.EVENT_START_OF_IFD: exifData.addIfdData( new IfdData( parser.getCurrentIfd() ) ); break; case ExifParser.EVENT_NEW_TAG: exifData.getIfdData(tag.getIfd()).setTag(tag); exifData.getIfdData( tag.getIfd() ).setTag( tag ); break; case ExifParser.EVENT_COMPRESSED_IMAGE: byte buf[] = new byte[parser.getCompressedImageSize()]; if( buf.length == parser.read( buf ) ) { exifData.setCompressedThumbnail( buf ); buf = new byte[parser.getStripSize()]; if( buf.length == parser.read( buf ) ) { exifData.setStripBytes( parser.getStripIndex(), buf );
private ArrayList<ExifTag> stripNullValueTags( ExifData data ) { ArrayList<ExifTag> nullTags = new ArrayList<ExifTag>(); for( ExifTag t : data.getAllTags() ) { if( t.getValue() == null && ! ExifInterface.isOffsetTag( t.getTagId() ) ) { data.removeTag( t.getTagId(), t.getIfd() ); nullTags.add( t ); } } return nullTags; }
dataOutputStream.writeInt( EXIF_HEADER ); dataOutputStream.writeShort( (short) 0x0000 ); if( mExifData.getByteOrder() == ByteOrder.BIG_ENDIAN ) { dataOutputStream.writeShort( TIFF_BIG_ENDIAN ); dataOutputStream.writeShort( TIFF_LITTLE_ENDIAN ); dataOutputStream.setByteOrder( mExifData.getByteOrder() ); dataOutputStream.writeShort( TIFF_HEADER ); dataOutputStream.writeInt( 8 ); mExifData.addTag( t );
private void writeAllTags( OrderedDataOutputStream dataOutputStream ) throws IOException { writeIfd( mExifData.getIfdData( IfdId.TYPE_IFD_0 ), dataOutputStream ); writeIfd( mExifData.getIfdData( IfdId.TYPE_IFD_EXIF ), dataOutputStream ); IfdData interoperabilityIfd = mExifData.getIfdData( IfdId.TYPE_IFD_INTEROPERABILITY ); if( interoperabilityIfd != null ) { writeIfd( interoperabilityIfd, dataOutputStream ); } IfdData gpsIfd = mExifData.getIfdData( IfdId.TYPE_IFD_GPS ); if( gpsIfd != null ) { writeIfd( gpsIfd, dataOutputStream ); } IfdData ifd1 = mExifData.getIfdData( IfdId.TYPE_IFD_1 ); if( ifd1 != null ) { writeIfd( mExifData.getIfdData( IfdId.TYPE_IFD_1 ), dataOutputStream ); } }
/** * Get the exif tags in this ExifInterface object or null if none exist. * * @return a List of {@link ExifTag}s. */ public List<ExifTag> getAllTags() { return mData.getAllTags(); }
/** * Returns the thumbnail if it is jpeg compressed, or null if none exists. * * @return the thumbnail as a byte array. */ public byte[] getThumbnail() { return mData.getCompressedThumbnail(); }
/** * Removes the thumbnail and its related tags. IFD1 will be removed. */ protected void removeThumbnailData() { clearThumbnailAndStrips(); mIfdDatas[IfdId.TYPE_IFD_1] = null; }
/** * Returns a list of ExifTags that share a TID (which can be obtained by * calling {@link #getTrueTagKey} on a defined tag constant) or null if none * exist. * * @param tagId a TID as defined in the exif standard (or with * {@link #defineTag}). * @return a List of {@link ExifTag}s. */ @SuppressWarnings( "unused" ) public List<ExifTag> getTagsForTagId( short tagId ) { return mData.getAllTagsForTagId( tagId ); }
/** * Returns a list of ExifTags that share an IFD (which can be obtained by * calling {@link #getTrueIfd(int)} on a defined tag constant) or null if none * exist. * * @param ifdId an IFD as defined in the exif standard (or with * {@link #defineTag}). * @return a List of {@link ExifTag}s. */ @SuppressWarnings( "unused" ) public List<ExifTag> getTagsForIfdId( int ifdId ) { return mData.getAllTagsForIfd( ifdId ); }
private void writeThumbnail( OrderedDataOutputStream dataOutputStream ) throws IOException { if( mExifData.hasCompressedThumbnail() ) { Log.d( TAG, "writing thumbnail.." ); dataOutputStream.write( mExifData.getCompressedThumbnail() ); } else if( mExifData.hasUncompressedStrip() ) { Log.d( TAG, "writing uncompressed strip.." ); for( int i = 0; i < mExifData.getStripCount(); i++ ) { dataOutputStream.write( mExifData.getStrip( i ) ); } } }
ExifData exifData = new ExifData( parser.getByteOrder() ); exifData.setSections( parser.getSections() ); exifData.mUncompressedDataPosition = parser.getUncompressedDataPosition(); exifData.setQualityGuess( parser.getQualityGuess() ); exifData.setJpegProcess( parser.getJpegProcess() ); exifData.setImageSize( w, h ); switch( event ) { case ExifParser.EVENT_START_OF_IFD: exifData.addIfdData( new IfdData( parser.getCurrentIfd() ) ); break; case ExifParser.EVENT_NEW_TAG: exifData.getIfdData(tag.getIfd()).setTag(tag); exifData.getIfdData( tag.getIfd() ).setTag( tag ); break; case ExifParser.EVENT_COMPRESSED_IMAGE: byte buf[] = new byte[parser.getCompressedImageSize()]; if( buf.length == parser.read( buf ) ) { exifData.setCompressedThumbnail( buf ); buf = new byte[parser.getStripSize()]; if( buf.length == parser.read( buf ) ) { exifData.setStripBytes( parser.getStripIndex(), buf );
/** * Returns the thumbnail from IFD1 as a byte array, or null if none exists. * The bytes may either be an uncompressed strip as specified in the exif * standard or a jpeg compressed image. * * @return the thumbnail as a byte array. */ @SuppressWarnings( "unused" ) public byte[] getThumbnailBytes() { if( mData.hasCompressedThumbnail() ) { return mData.getCompressedThumbnail(); } else if( mData.hasUncompressedStrip() ) { // TODO: implement this } return null; }
private ArrayList<ExifTag> stripNullValueTags( ExifData data ) { ArrayList<ExifTag> nullTags = new ArrayList<ExifTag>(); for( ExifTag t : data.getAllTags() ) { if( t.getValue() == null && ! ExifInterface.isOffsetTag( t.getTagId() ) ) { data.removeTag( t.getTagId(), t.getIfd() ); nullTags.add( t ); } } return nullTags; }
dataOutputStream.writeInt( EXIF_HEADER ); dataOutputStream.writeShort( (short) 0x0000 ); if( mExifData.getByteOrder() == ByteOrder.BIG_ENDIAN ) { dataOutputStream.writeShort( TIFF_BIG_ENDIAN ); dataOutputStream.writeShort( TIFF_LITTLE_ENDIAN ); dataOutputStream.setByteOrder( mExifData.getByteOrder() ); dataOutputStream.writeShort( TIFF_HEADER ); dataOutputStream.writeInt( 8 ); mExifData.addTag( t );
private void writeAllTags( OrderedDataOutputStream dataOutputStream ) throws IOException { writeIfd( mExifData.getIfdData( IfdId.TYPE_IFD_0 ), dataOutputStream ); writeIfd( mExifData.getIfdData( IfdId.TYPE_IFD_EXIF ), dataOutputStream ); IfdData interoperabilityIfd = mExifData.getIfdData( IfdId.TYPE_IFD_INTEROPERABILITY ); if( interoperabilityIfd != null ) { writeIfd( interoperabilityIfd, dataOutputStream ); } IfdData gpsIfd = mExifData.getIfdData( IfdId.TYPE_IFD_GPS ); if( gpsIfd != null ) { writeIfd( gpsIfd, dataOutputStream ); } IfdData ifd1 = mExifData.getIfdData( IfdId.TYPE_IFD_1 ); if( ifd1 != null ) { writeIfd( mExifData.getIfdData( IfdId.TYPE_IFD_1 ), dataOutputStream ); } }