public byte[] writeImageToBytes(Image image, float quality) throws Exception { BufferedImage bi; if (image instanceof BufferedImage && ((BufferedImage) image).getType() == BufferedImage.TYPE_INT_RGB) { bi = (BufferedImage) image; } else { bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); g.drawImage(image, 0, 0, width, height, null); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageWriter imgWrtr = ImageIO.getImageWritersByFormatName("jpg").next(); ImageOutputStream imgOutStrm = ImageIO.createImageOutputStream(baos); imgWrtr.setOutput(imgOutStrm); ImageWriteParam jpgWrtPrm = imgWrtr.getDefaultWriteParam(); jpgWrtPrm.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); jpgWrtPrm.setCompressionQuality(quality); imgWrtr.write(null, new IIOImage(bi, null, null), jpgWrtPrm); imgOutStrm.close(); return baos.toByteArray(); } }
/** * produce the gif image as byte array * @return the gif image */ public byte[] get() { if (ios != null) try { ios.close(); ios = null; } catch (final IOException e) {} if (writer != null) { writer.dispose(); writer = null; } return baos.toByteArray(); }
ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next(); ImageWriteParam writeParam = writer.getDefaultWriteParam(); ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB); IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageOutputStream stream = ImageIO.createImageOutputStream(baos); writer.setOutput(stream); writer.write(metadata, new IIOImage(buffImg, null, metadata), writeParam); stream.close(); return baos.toByteArray();
ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next(); ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam(); jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); jpgWriteParam.setCompressionQuality(0.7f); ImageOutputStream outputStream = createOutputStream(); // For example implementations see below jpgWriter.setOutput(outputStream); IIOImage outputImage = new IIOImage(image, null, null); jpgWriter.write(null, outputImage, jpgWriteParam); jpgWriter.dispose();
// Get a writer for JPEG. ImageWriter iw = ImageIO.getImageWritersByFormatName("jpeg").next(); iw.setOutput(new FileImageOutputStream(outputFile)); // Set the compression quality to 0.9f. ImageWriteParam iwParam = iw.getDefaultWriteParam(); iwParam.setCompressionQuality(0.9f); // Write image iw.write(null, new IIOImage(imageToWrite, null, null), iwParam);
ImageWriter imageWriter = null; try { Iterator<ImageWriter> imageWriters = ImageIO.getImageWritersByMIMEType(contentType.toString()); if (imageWriters.hasNext()) { imageWriter = imageWriters.next(); ImageWriteParam iwp = imageWriter.getDefaultWriteParam(); process(iwp); imageOutputStream = createImageOutputStream(body); imageWriter.setOutput(imageOutputStream); imageWriter.write(null, new IIOImage(image, null, null), iwp); imageWriter.dispose(); imageOutputStream.close();
public byte[] toBytes(BufferedImage image) throws IOException { if (baos == null) { baos = new ByteArrayOutputStream(); } else { baos.reset(); } writer.setOutput(ImageIO.createImageOutputStream(baos)); // Create a new empty metadata set IIOMetadata metadata = writer.getDefaultImageMetadata( new ImageTypeSpecifier(image.getColorModel(), image.getSampleModel()), writeParam); writer.write(new IIOImage(image, Collections.<BufferedImage>emptyList(), metadata)); return baos.toByteArray(); } }
try ( final ByteArrayInputStream stream = new ByteArrayInputStream( bytes ) ) avatar = ImageIO.read( stream ); if ( avatar.getWidth() <= targetDimension && avatar.getHeight() <= targetDimension ) Log.debug( "Original image dimension ({}x{}) is within acceptable bounds ({}x{}). No need to resize.", new Object[] { avatar.getWidth(), avatar.getHeight(), targetDimension, targetDimension }); return null; try ( final ByteArrayOutputStream bostream = new ByteArrayOutputStream(); final ImageOutputStream iostream = new MemoryCacheImageOutputStream( bostream ) ) iw.setOutput( iostream ); iw.write( resizedAvatar ); final byte[] data = bostream.toByteArray();
gui.add(quality, BorderLayout.WEST); originalImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); textImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); textLcdContrast.addItemListener(itemListener); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); ImageIO.write( image, "png", outStream ); pngSize = outStream.toByteArray().length; ImageIO.read(new ByteArrayInputStream(outStream.toByteArray())); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); ImageWriter imgWriter = ImageIO.getImageWritersByFormatName( "jpg" ).next(); ImageOutputStream ioStream = ImageIO.createImageOutputStream( outStream ); imgWriter.setOutput( ioStream ); jpegParams.setCompressionMode( ImageWriteParam.MODE_EXPLICIT ); jpegParams.setCompressionQuality( qualityFloat ); imgWriter.write( null, new IIOImage( image, null, null ), jpegParams ); imgWriter.dispose(); jpgSize = outStream.toByteArray().length;
@Test public void testRemoveAllIIOWriteProgressListeners() throws IOException { ImageWriter writer = createImageWriter(); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); writer.setOutput(ImageIO.createImageOutputStream(buffer)); IIOWriteProgressListener listener = mock(IIOWriteProgressListener.class); writer.addIIOWriteProgressListener(listener); writer.removeAllIIOWriteProgressListeners(); try { writer.write(getTestData(0)); } catch (IOException e) { fail("Could not write image"); } // Should not have called any methods... verifyZeroInteractions(listener); }
protected InputStream compress(BufferedImage image, String formatName) throws Exception { if (formatName.toLowerCase().equals("jpeg") || formatName.toLowerCase().equals("jpg")) { image = stripAlpha(image); } ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); BufferedOutputStream bos = new BufferedOutputStream(byteArrayOutputStream); if (formatName.toLowerCase().equals("gif")) { formatName = "png"; } Iterator<ImageWriter> writerIter = ImageIO.getImageWritersByFormatName(formatName); ImageWriter writer = writerIter.next(); ImageWriteParam iwp = writer.getDefaultWriteParam(); if (formatName.toLowerCase().equals("jpeg") || formatName.toLowerCase().equals("jpg")) { iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); iwp.setCompressionQuality(0.85F); iwp.setProgressiveMode(ImageWriteParam.MODE_DEFAULT); } MemoryCacheImageOutputStream output = new MemoryCacheImageOutputStream(bos); writer.setOutput(output); IIOImage iomage = new IIOImage(image, null,null); writer.write(null, iomage, iwp); bos.flush(); return new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); }
for (int i = 0; i < testData.size(); i++) { RenderedImage image = testData.get(i); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); ImageOutputStream stream = ImageIO.createImageOutputStream(buffer); writer.setOutput(stream); writer.write(original); stream.close(); // Force data to be written assertTrue("No image data written", buffer.size() > 0); ImageInputStream input = new ByteArrayImageInputStream(buffer.toByteArray()); BufferedImage written = ImageIO.read(input); assertEquals(original.getWidth(), written.getWidth()); assertEquals(original.getHeight(), written.getHeight()); for (int y = 0; y < original.getHeight(); y++) {
public static byte[] toJpg(BufferedImage image) throws IOException { // Start with a white layer to have images with an alpha layer handled correctly. BufferedImage newBufferedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); newBufferedImage.createGraphics().drawImage(image, 0, 0, Color.WHITE, null); // Manually get the ImageWriter to be able to adjust quality ImageWriter writer = ImageIO.getImageWritersBySuffix("jpg").next(); ImageWriteParam imageWriterParam = writer.getDefaultWriteParam(); imageWriterParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); imageWriterParam.setCompressionQuality(1f); ByteArrayOutputStream output = new ByteArrayOutputStream(); writer.setOutput(new MemoryCacheImageOutputStream(output)); writer.write(null, new IIOImage(newBufferedImage, null, null), imageWriterParam); writer.dispose(); return output.toByteArray(); }
try { RenderedImage image = testData.get(i); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); ImageOutputStream stream = ImageIO.createImageOutputStream(buffer); writer.setOutput(stream); writer.write(original); stream.close(); // Force data to be written assertTrue("No image data written", buffer.size() > 0); ImageInputStream input = ImageIO.createImageInputStream(new ByteArrayInputStream(buffer.toByteArray())); BufferedImage written = ImageIO.read(input); assertEquals(original.getWidth(), written.getWidth()); assertEquals(original.getHeight(), written.getHeight()); assertSameType(original, written); assertSameData(original, written);
@Test public void testWriteWithQualitySettingMatchesGetQuality() throws IOException { ImageWriter writer = ImageIO.getImageWritersByMIMEType("image/jpeg").next(); // If this fails, we have a more serious problem ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(quality); ByteArrayOutputStream temp = new ByteArrayOutputStream(); ImageOutputStream output = ImageIO.createImageOutputStream(temp); writer.setOutput(output); writer.write(null, new IIOImage(createTestImage(), null, null), param); output.close(); ImageInputStream input = new ByteArrayImageInputStream(temp.toByteArray());
@Test public void testWriteRead() throws IOException { ImageWriter writer = createImageWriter(); ImageReader reader = ImageIO.getImageReader(writer); assumeNotNull(reader); for (RenderedImage testData : getTestData()) { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); try (ImageOutputStream stream = ImageIO.createImageOutputStream(buffer)) { writer.setOutput(stream); writer.write(drawSomething((BufferedImage) testData)); } try (ImageInputStream stream = ImageIO.createImageInputStream(new ByteArrayInputStream(buffer.toByteArray()))) { reader.setInput(stream); BufferedImage image = reader.read(0); assertNotNull(image); assertImageDataEquals("Images differ for " + testData, (BufferedImage) testData, image); } } } }
@Test(expected = IllegalArgumentException.class) public void testWriteNonSquare() throws IOException { // ICNS only supports square icons (except some arcane 16x12 we don't currently support) ImageWriter writer = createImageWriter(); try (ImageOutputStream stream = ImageIO.createImageOutputStream(new ByteArrayOutputStream())) { writer.setOutput(stream); writer.write(new BufferedImage(32, 64, BufferedImage.TYPE_INT_ARGB)); } finally { writer.dispose(); } }
@SuppressWarnings("ConstantConditions") @Test public void testWriteNull() throws IOException { ImageWriter writer = createImageWriter(); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); writer.setOutput(ImageIO.createImageOutputStream(buffer)); try { writer.write((RenderedImage) null); } catch(IllegalArgumentException ignore) { } catch (IOException e) { fail(e.getMessage()); } assertTrue("Image data written", buffer.size() == 0); }
/** * create a gif animation producer * @param loops - number of loops for the animated images. -1 = no loops; 0 = indefinitely loops; else: number of loops */ public AnimationGIF(int loops) { this.counter = 0; this.loops = loops; this.ios = null; this.writer = null; this.baos = new ByteArrayOutputStream(); Iterator<ImageWriter> writerIterator = ImageIO.getImageWritersByFormatName("GIF"); this.writer = writerIterator.next(); // com.sun.media.imageioimpl.plugins.gif.GIFImageWriter, com.sun.imageio.plugins.gif.GIFImageWriter this.ios = new MemoryCacheImageOutputStream(baos); this.writer.setOutput(ios); this.iwp = writer.getDefaultWriteParam(); }
@Test(expected = IllegalStateException.class) public void testWriteSequenceNotStarted() throws IOException { // ICNS only supports sizes in multiples of 2 (16, 32, 64, ..., 1024 + 48 and 96) ImageWriter writer = createImageWriter(); try (ImageOutputStream stream = ImageIO.createImageOutputStream(new ByteArrayOutputStream())) { writer.setOutput(stream); BufferedImage image = new BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB); writer.writeToSequence(new IIOImage(image, null, null), writer.getDefaultWriteParam()); } finally { writer.dispose(); } }