package com.idega.slide.extractor;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.slide.content.NodeRevisionDescriptor;
import org.apache.slide.content.NodeRevisionDescriptors;
import org.apache.slide.extractor.AbstractPropertyExtractor;
import org.apache.slide.extractor.ExtractorException;
import com.idega.graphics.ImageInfo;
import com.idega.slide.util.IWSlideConstants;
/**
* Extracts image information; height,width,bits per pixel and dpi. <br>
* Based on the open source projects ImageInfo and code from Hippo CMS
*
* @author <a href="mailto:eiki@idega.is">Eirikur Hrafnsson</a>
*/
public class ImagePropertyExtractor extends AbstractPropertyExtractor {
private static final String HEIGHT_PROPERTY = IWSlideConstants.PROPERTYNAME_HEIGHT;
private static final String WIDTH_PROPERTY = IWSlideConstants.PROPERTYNAME_WIDTH;
private static final String BITS_PER_PIXEL_PROPERTY = IWSlideConstants.PROPERTYNAME_BITS_PER_PIXEL;
private static final String DPI_PROPERTY = IWSlideConstants.PROPERTYNAME_DPI;
private static final String WIDTH_AND_HEIGHT_PROPERTY = IWSlideConstants.PROPERTYNAME_WIDTH_AND_HEIGHT_PROPERTY;
public ImagePropertyExtractor(String namespace, String uri, String contentType) {
super(namespace, uri, contentType);
}
public Map extract(NodeRevisionDescriptors descriptors, NodeRevisionDescriptor descriptor, InputStream content) throws ExtractorException {
Map result = new HashMap();
ImageInfo ii = new ImageInfo();
ii.setInput(content);
if (ii.check()) {
final int width = ii.getWidth();
final int height = ii.getHeight();
final int bitsPerPixel = ii.getBitsPerPixel();
final int widthDpi = ii.getPhysicalWidthDpi();
result.put(HEIGHT_PROPERTY, String.valueOf(height));
result.put(WIDTH_PROPERTY, String.valueOf(width));
result.put(WIDTH_AND_HEIGHT_PROPERTY, String.valueOf(width) + "x" + String.valueOf(height));
result.put(BITS_PER_PIXEL_PROPERTY, String.valueOf(bitsPerPixel));
if (widthDpi != -1) {
result.put(DPI_PROPERTY, String.valueOf(widthDpi));
}
}
return result;
}
}