use of org.apache.batik.ext.awt.image.rendered.FormatRed in project quick-media by liuyueyi.
the class PNGRegistryEntry method handleStream.
/**
* Decode the Stream into a RenderableImage
*
* @param inIS The input stream that contains the image.
* @param origURL The original URL, if any, for documentation
* purposes only. This may be null.
* @param needRawData If true the image returned should not have
* any default color correction the file may
* specify applied.
*/
public Filter handleStream(InputStream inIS, ParsedURL origURL, boolean needRawData) {
final DeferRable dr = new DeferRable();
final InputStream is = inIS;
final boolean raw = needRawData;
final String errCode;
final Object[] errParam;
if (origURL != null) {
errCode = ERR_URL_FORMAT_UNREADABLE;
errParam = new Object[] { "PNG", origURL };
} else {
errCode = ERR_STREAM_FORMAT_UNREADABLE;
errParam = new Object[] { "PNG" };
}
Thread t = new Thread() {
public void run() {
Filter filt;
try {
PNGDecodeParam param = new PNGDecodeParam();
param.setExpandPalette(true);
if (raw)
param.setPerformGammaCorrection(false);
else {
param.setPerformGammaCorrection(true);
// sRGB gamma
param.setDisplayExponent(2.2f);
}
CachableRed cr = new PNGRed(is, param);
dr.setBounds(new Rectangle2D.Double(0, 0, cr.getWidth(), cr.getHeight()));
cr = new Any2sRGBRed(cr);
cr = new FormatRed(cr, GraphicsUtil.sRGB_Unpre);
WritableRaster wr = (WritableRaster) cr.getData();
ColorModel cm = cr.getColorModel();
BufferedImage image;
image = new BufferedImage(cm, wr, cm.isAlphaPremultiplied(), null);
cr = GraphicsUtil.wrap(image);
filt = new RedRable(cr);
} catch (IOException ioe) {
filt = ImageTagRegistry.getBrokenLinkImage(PNGRegistryEntry.this, errCode, errParam);
} catch (ThreadDeath td) {
filt = ImageTagRegistry.getBrokenLinkImage(PNGRegistryEntry.this, errCode, errParam);
dr.setSource(filt);
throw td;
} catch (Throwable t) {
filt = ImageTagRegistry.getBrokenLinkImage(PNGRegistryEntry.this, errCode, errParam);
}
dr.setSource(filt);
}
};
t.start();
return dr;
}
use of org.apache.batik.ext.awt.image.rendered.FormatRed in project quick-media by liuyueyi.
the class AbstractImageIORegistryEntry method handleStream.
/**
* Decode the Stream into a RenderableImage
*
* @param inIS The input stream that contains the image.
* @param origURL The original URL, if any, for documentation
* purposes only. This may be null.
* @param needRawData If true the image returned should not have
* any default color correction the file may
* specify applied.
*/
public Filter handleStream(InputStream inIS, ParsedURL origURL, boolean needRawData) {
final DeferRable dr = new DeferRable();
final InputStream is = inIS;
final String errCode;
final Object[] errParam;
if (origURL != null) {
errCode = ERR_URL_FORMAT_UNREADABLE;
errParam = new Object[] { getFormatName(), origURL };
} else {
errCode = ERR_STREAM_FORMAT_UNREADABLE;
errParam = new Object[] { getFormatName() };
}
Thread t = new Thread() {
@Override
public void run() {
Filter filt;
try {
Iterator<ImageReader> iter = ImageIO.getImageReadersByMIMEType(getMimeTypes().get(0).toString());
if (!iter.hasNext()) {
throw new UnsupportedOperationException("No image reader for " + getFormatName() + " available!");
}
ImageReader reader = iter.next();
ImageInputStream imageIn = ImageIO.createImageInputStream(is);
reader.setInput(imageIn, true);
int imageIndex = 0;
dr.setBounds(new Rectangle2D.Double(0, 0, reader.getWidth(imageIndex), reader.getHeight(imageIndex)));
CachableRed cr;
// Naive approach possibly wasting lots of memory
// and ignoring the gamma correction done by PNGRed :-(
// Matches the code used by the former JPEGRegistryEntry, though.
BufferedImage bi = reader.read(imageIndex);
if (bi.getType() == BufferedImage.TYPE_BYTE_INDEXED) {
BufferedImage image = new BufferedImage(bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = image.createGraphics();
g2d.drawImage(bi, 0, 0, null);
g2d.dispose();
cr = GraphicsUtil.wrap(image);
} else {
cr = GraphicsUtil.wrap(bi);
cr = new Any2sRGBRed(cr);
cr = new FormatRed(cr, GraphicsUtil.sRGB_Unpre);
WritableRaster wr = (WritableRaster) cr.getData();
ColorModel cm = cr.getColorModel();
BufferedImage image = new BufferedImage(cm, wr, cm.isAlphaPremultiplied(), null);
cr = GraphicsUtil.wrap(image);
}
filt = new RedRable(cr);
} catch (IOException ioe) {
// Something bad happened here...
filt = ImageTagRegistry.getBrokenLinkImage(AbstractImageIORegistryEntry.this, errCode, errParam);
} catch (ThreadDeath td) {
filt = ImageTagRegistry.getBrokenLinkImage(AbstractImageIORegistryEntry.this, errCode, errParam);
dr.setSource(filt);
throw td;
} catch (Throwable t) {
filt = ImageTagRegistry.getBrokenLinkImage(AbstractImageIORegistryEntry.this, errCode, errParam);
}
dr.setSource(filt);
}
};
t.start();
return dr;
}
use of org.apache.batik.ext.awt.image.rendered.FormatRed in project opencast by opencast.
the class CoverImageServiceOsgiImpl method activate.
/**
* OSGi activation callback
*
* @param cc
* the OSGi component context
*/
@Override
public void activate(ComponentContext cc) {
super.activate(cc);
// See
// http://www.stichlberger.com/software/workaround-for-batiks-noclassdeffounderrorclassnotfoundexception-truncatedfileexception/
// ---------------
// add this code before you use batik (make sure is runs only once)
// via the lower priority this subclass is registered before JPEGRegistryEntry
// and prevents JPEGRegistryEntry.handleStream from breaking when used on a non Sun/Oracle JDK
JPEGRegistryEntry entry = new JPEGRegistryEntry() {
@Override
public float getPriority() {
// higher than that of JPEGRegistryEntry (which is 1000)
return 500;
}
/**
* Decode the Stream into a RenderableImage
*
* @param inIS
* The input stream that contains the image.
* @param origURL
* The original URL, if any, for documentation purposes only. This may be null.
* @param needRawData
* If true the image returned should not have any default color correction the file may specify applied.
*/
@Override
public Filter handleStream(InputStream inIS, ParsedURL origURL, boolean needRawData) {
// Code from org.apache.batik.ext.awt.image.codec.jpeg.JPEGRegistryEntry#handleStream
// Reading image with ImageIO to prevent NoClassDefFoundError on OpenJDK
final DeferRable dr = new DeferRable();
final InputStream is = inIS;
final String errCode;
final Object[] errParam;
if (origURL != null) {
errCode = ERR_URL_FORMAT_UNREADABLE;
errParam = new Object[] { "JPEG", origURL };
} else {
errCode = ERR_STREAM_FORMAT_UNREADABLE;
errParam = new Object[] { "JPEG" };
}
Thread t = new Thread() {
@Override
public void run() {
Filter filt;
try {
BufferedImage image;
image = ImageIO.read(is);
dr.setBounds(new Rectangle2D.Double(0, 0, image.getWidth(), image.getHeight()));
CachableRed cr;
cr = GraphicsUtil.wrap(image);
cr = new Any2sRGBRed(cr);
cr = new FormatRed(cr, GraphicsUtil.sRGB_Unpre);
WritableRaster wr = (WritableRaster) cr.getData();
ColorModel cm = cr.getColorModel();
image = new BufferedImage(cm, wr, cm.isAlphaPremultiplied(), null);
cr = GraphicsUtil.wrap(image);
filt = new RedRable(cr);
} catch (IOException ioe) {
// Something bad happened here...
filt = ImageTagRegistry.getBrokenLinkImage(this, errCode, errParam);
} catch (ThreadDeath td) {
filt = ImageTagRegistry.getBrokenLinkImage(this, errCode, errParam);
dr.setSource(filt);
throw td;
} catch (Throwable t) {
filt = ImageTagRegistry.getBrokenLinkImage(this, errCode, errParam);
}
dr.setSource(filt);
}
};
t.start();
return dr;
}
};
ImageTagRegistry.getRegistry().register(entry);
logger.info("Cover image service activated");
}
use of org.apache.batik.ext.awt.image.rendered.FormatRed in project quick-media by liuyueyi.
the class TIFFTranscoderImageIOWriteAdapter method writeImage.
/**
* @throws TranscoderException
* @see org.apache.batik.transcoder.image.TIFFTranscoder.WriteAdapter#writeImage(TIFFTranscoder, java.awt.image.BufferedImage, org.apache.batik.transcoder.TranscoderOutput)
*/
public void writeImage(TIFFTranscoder transcoder, BufferedImage img, TranscoderOutput output) throws TranscoderException {
TranscodingHints hints = transcoder.getTranscodingHints();
ImageWriter writer = ImageWriterRegistry.getInstance().getWriterFor("image/tiff");
ImageWriterParams params = new ImageWriterParams();
float PixSzMM = transcoder.getUserAgent().getPixelUnitToMillimeter();
int PixSzInch = (int) (25.4 / PixSzMM + 0.5);
params.setResolution(PixSzInch);
if (hints.containsKey(TIFFTranscoder.KEY_COMPRESSION_METHOD)) {
String method = (String) hints.get(TIFFTranscoder.KEY_COMPRESSION_METHOD);
// Values set here as defined in TIFFImageWriteParam of JAI Image I/O Tools
if ("packbits".equals(method)) {
params.setCompressionMethod("PackBits");
} else if ("deflate".equals(method)) {
params.setCompressionMethod("Deflate");
} else if ("lzw".equals(method)) {
params.setCompressionMethod("LZW");
} else if ("jpeg".equals(method)) {
params.setCompressionMethod("JPEG");
} else {
// nop
}
}
try {
OutputStream ostream = output.getOutputStream();
int w = img.getWidth();
int h = img.getHeight();
SinglePixelPackedSampleModel sppsm;
sppsm = (SinglePixelPackedSampleModel) img.getSampleModel();
int bands = sppsm.getNumBands();
int[] off = new int[bands];
for (int i = 0; i < bands; i++) off[i] = i;
SampleModel sm = new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE, w, h, bands, w * bands, off);
RenderedImage rimg = new FormatRed(GraphicsUtil.wrap(img), sm);
writer.writeImage(rimg, ostream, params);
ostream.flush();
} catch (IOException ex) {
throw new TranscoderException(ex);
}
}
Aggregations