use of org.apache.batik.ext.awt.image.spi.ImageWriter in project quick-media by liuyueyi.
the class PNGTranscoderImageIOWriteAdapter method writeImage.
/**
* @throws TranscoderException
* @see org.apache.batik.transcoder.image.PNGTranscoder.WriteAdapter#writeImage(org.apache.batik.transcoder.image.PNGTranscoder, java.awt.image.BufferedImage, org.apache.batik.transcoder.TranscoderOutput)
*/
public void writeImage(PNGTranscoder transcoder, BufferedImage img, TranscoderOutput output) throws TranscoderException {
TranscodingHints hints = transcoder.getTranscodingHints();
int n = -1;
if (hints.containsKey(PNGTranscoder.KEY_INDEXED)) {
n = ((Integer) hints.get(PNGTranscoder.KEY_INDEXED)).intValue();
if (n == 1 || n == 2 || n == 4 || n == 8)
// PNGEncodeParam.Palette can handle these numbers only.
img = IndexImage.getIndexedImage(img, 1 << n);
}
ImageWriter writer = ImageWriterRegistry.getInstance().getWriterFor("image/png");
ImageWriterParams params = new ImageWriterParams();
/* NYI!!!!!
PNGEncodeParam params = PNGEncodeParam.getDefaultEncodeParam(img);
if (params instanceof PNGEncodeParam.RGB) {
((PNGEncodeParam.RGB)params).setBackgroundRGB
(new int [] { 255, 255, 255 });
}*/
// If they specify GAMMA key with a value of '0' then omit
// gamma chunk. If they do not provide a GAMMA then just
// generate an sRGB chunk. Otherwise supress the sRGB chunk
// and just generate gamma and chroma chunks.
/* NYI!!!!!!
if (hints.containsKey(PNGTranscoder.KEY_GAMMA)) {
float gamma = ((Float)hints.get(PNGTranscoder.KEY_GAMMA)).floatValue();
if (gamma > 0) {
params.setGamma(gamma);
}
params.setChromaticity(PNGTranscoder.DEFAULT_CHROMA);
} else {
// We generally want an sRGB chunk and our encoding intent
// is perceptual
params.setSRGBIntent(PNGEncodeParam.INTENT_PERCEPTUAL);
}*/
float PixSzMM = transcoder.getUserAgent().getPixelUnitToMillimeter();
int PixSzInch = (int) (25.4 / PixSzMM + 0.5);
params.setResolution(PixSzInch);
try {
OutputStream ostream = output.getOutputStream();
writer.writeImage(img, ostream, params);
ostream.flush();
} catch (IOException ex) {
throw new TranscoderException(ex);
}
}
use of org.apache.batik.ext.awt.image.spi.ImageWriter 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