package com.bumptech.glide.load;
import com.bumptech.glide.load.engine.bitmap_recycle.ArrayPool;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
/**
* Interface for the ImageHeaderParser.
*/
public interface ImageHeaderParser {
/**
* A constant indicating we were unable to parse the orientation from the image either because
* no exif segment containing orientation data existed, or because of an I/O error attempting to
* read the exif segment.
*/
int UNKNOWN_ORIENTATION = -1;
/**
* The format of the image data including whether or not the image may include transparent
* pixels.
*/
enum ImageType {
GIF(true),
JPEG(false),
RAW(false),
/** PNG type with alpha. */
PNG_A(true),
/** PNG type without alpha. */
PNG(false),
/** WebP type with alpha. */
WEBP_A(true),
/** WebP type without alpha. */
WEBP(false),
/**
* Unrecognized type.
*/
UNKNOWN(false);
private final boolean hasAlpha;
ImageType(boolean hasAlpha) {
this.hasAlpha = hasAlpha;
}
public boolean hasAlpha() {
return hasAlpha;
}
}
ImageType getType(InputStream is) throws IOException;
ImageType getType(ByteBuffer byteBuffer) throws IOException;
/**
* Parse the orientation from the image header. If it doesn't handle this image type (or this is
* not an image) it will return a default value rather than throwing an exception.
*
* @return The exif orientation if present or -1 if the header couldn't be parsed or doesn't
* contain an orientation
* @throws IOException
*/
int getOrientation(InputStream is, ArrayPool byteArrayPool) throws IOException;
int getOrientation(ByteBuffer byteBuffer, ArrayPool byteArrayPool) throws IOException;
}