@Override
public ImageInfo getImageInfo(final ByteSource byteSource, final Map params)
throws ImageReadException, IOException {
final PsdImageContents imageContents = readImageContents(byteSource);
// ImageContents imageContents = readImage(byteSource, false);
if (imageContents == null) {
throw new ImageReadException("PSD: Couldn't read blocks");
}
final PsdHeaderInfo header = imageContents.header;
if (header == null) {
throw new ImageReadException("PSD: Couldn't read Header");
}
final int width = header.columns;
final int height = header.rows;
final List comments = new ArrayList<>();
// TODO: comments...
int BitsPerPixel = header.depth * getChannelsPerMode(header.mode);
// System.out.println("header.Depth: " + header.Depth);
// System.out.println("header.Mode: " + header.Mode);
// System.out.println("getChannelsPerMode(header.Mode): " +
// getChannelsPerMode(header.Mode));
if (BitsPerPixel < 0) {
BitsPerPixel = 0;
}
final ImageFormat format = ImageFormats.PSD;
final String formatName = "Photoshop";
final String mimeType = "image/x-photoshop";
// we ought to count images, but don't yet.
final int numberOfImages = -1;
// not accurate ... only reflects first
final boolean progressive = false;
final int physicalWidthDpi = 72;
final float physicalWidthInch = (float) ((double) width / (double) physicalWidthDpi);
final int physicalHeightDpi = 72;
final float physicalHeightInch = (float) ((double) height / (double) physicalHeightDpi);
final String formatDetails = "Psd";
final boolean transparent = false; // TODO: inaccurate.
final boolean usesPalette = header.mode == COLOR_MODE_INDEXED;
final ImageInfo.ColorType colorType = ImageInfo.ColorType.UNKNOWN;
ImageInfo.CompressionAlgorithm compressionAlgorithm;
switch (imageContents.Compression) {
case 0:
compressionAlgorithm = ImageInfo.CompressionAlgorithm.NONE;
break;
case 1:
compressionAlgorithm = ImageInfo.CompressionAlgorithm.PSD;
break;
default:
compressionAlgorithm = ImageInfo.CompressionAlgorithm.UNKNOWN;
}
return new ImageInfo(formatDetails, BitsPerPixel, comments,
format, formatName, height, mimeType, numberOfImages,
physicalHeightDpi, physicalHeightInch, physicalWidthDpi,
physicalWidthInch, width, progressive, transparent,
usesPalette, colorType, compressionAlgorithm);
}