/** * 根据给定的图片格式或者扩展名获取{@link ImageWriter},如果未找到合适的Writer,返回null * * @param formatName 图片格式或扩展名,例如"jpg"、"png" * @return {@link ImageWriter} * @since 4.3.2 */ public static ImageWriter getWriter(String formatName) { ImageWriter writer = null; Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(formatName); if (iter.hasNext()) { writer = iter.next(); } if (null == writer) { // 尝试扩展名获取 iter = ImageIO.getImageWritersBySuffix(formatName); if (iter.hasNext()) { writer = iter.next(); } } return writer; }
/** * 根据给定的图片格式或者扩展名获取{@link ImageWriter},如果未找到合适的Writer,返回null * * @param formatName 图片格式或扩展名,例如"jpg"、"png" * @return {@link ImageWriter} * @since 4.3.2 */ public static ImageWriter getWriter(String formatName) { ImageWriter writer = null; Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(formatName); if (iter.hasNext()) { writer = iter.next(); } if (null == writer) { // 尝试扩展名获取 iter = ImageIO.getImageWritersBySuffix(formatName); if (iter.hasNext()) { writer = iter.next(); } } return writer; }
/** * 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(); }
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(); } }
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(getFormatName(format)); if (iter.hasNext()) { writer = (ImageWriter) iter.next();
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(format); if (!writers.hasNext())
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()); }
/** * Compress {@link BufferedImage} with a given quality into byte array. * * @param bi the {@link BufferedImage} to compres into byte array * @param quality the compressed image quality (1 = 100%, 0.5 = 50%, 0.1 = 10%, etc) * @return The size of compressed data (number of bytes) */ private int compress(BufferedImage bi, float quality) { baos.reset(); final JPEGImageWriteParam params = new JPEGImageWriteParam(null); params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); params.setCompressionQuality(quality); try (MemoryCacheImageOutputStream mcios = new MemoryCacheImageOutputStream(baos)) { final ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); writer.setOutput(mcios); writer.write(null, new IIOImage(bi, null, null), params); } catch (IOException e) { throw new IllegalStateException(e); } return baos.size(); }
if (!ImageIO.getImageWritersByFormatName(outputFormat).hasNext()) { throw new RuntimeException("No image writers found that can handle the format '" + outputFormat + "'");
if (!ImageIO.getImageWritersByFormatName(outputFormat).hasNext()) { throw new RuntimeException("No image writers found that can handle the format '" + outputFormat + "'");
try iw = ImageIO.getImageWritersByFormatName(formatName).next();
public static void write(BufferedImage outputImage, Output output, File outputFile) throws IOException { if (output == Output.JPG) { // Need to strip alpha; BufferedImage img = new BufferedImage(outputImage.getWidth(), outputImage.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = img.createGraphics(); g2d.drawImage(outputImage, 0, 0, null); g2d.dispose(); outputImage = img; Iterator<javax.imageio.ImageWriter> itor = ImageIO.getImageWritersByFormatName("jpeg"); javax.imageio.ImageWriter writer = itor.next(); ImageWriteParam imageWriteParam = writer.getDefaultWriteParam(); imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); imageWriteParam.setCompressionQuality(0.9f); FileImageOutputStream outputStream = new FileImageOutputStream(outputFile); writer.setOutput(outputStream); IIOImage image = new IIOImage(outputImage, null, null); writer.write(null, image, imageWriteParam); writer.dispose(); } else { ImageIO.write(outputImage, output.getFormat(), outputFile); } }
@Override public void writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException { BufferedImage awtImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR); Screenshots.convertScreenShot2(imageData.asIntBuffer(), awtImage); ImageWriter writer = ImageIO.getImageWritersByFormatName(format).next(); ImageWriteParam writeParam = writer.getDefaultWriteParam(); if (format.equals("jpg")) { JPEGImageWriteParam jpegParam = (JPEGImageWriteParam) writeParam; jpegParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); jpegParam.setCompressionQuality(0.95f); } awtImage = verticalFlip(awtImage); ImageOutputStream imgOut = new MemoryCacheImageOutputStream(outStream); writer.setOutput(imgOut); IIOImage outputImage = new IIOImage(awtImage, null, null); try { writer.write(null, outputImage, writeParam); } finally { imgOut.close(); writer.dispose(); } }
canvas = newImage; Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg"); ImageWriter writer = writers.next(); ImageWriteParam param = writer.getDefaultWriteParam();
canvas = newImage; Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg"); ImageWriter writer = writers.next(); ImageWriteParam param = writer.getDefaultWriteParam();
ImageIO.getImageWritersByFormatName(formatName);
ImageIO.getImageWritersByFormatName(formatName);
void saveImage(OutputStream stream, String type, float quality) throws IOException { if (type.equalsIgnoreCase("png")) { ImageIO.write(img, "png", stream); } else if (type.equalsIgnoreCase("gif")) { GifEncoder gifEncoder = new GifEncoder(img); gifEncoder.encode(stream); } else if (type.equalsIgnoreCase("jpg") || type.equalsIgnoreCase("jpeg")) { Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpg"); ImageWriter writer = iter.next(); ImageWriteParam iwp = writer.getDefaultWriteParam(); iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); iwp.setCompressionQuality(quality); writer.setOutput(stream); writer.write(img); writer.dispose(); } else { throw new IOException("Unsupported image format: " + type); } stream.flush(); }
private ImageWriter getPNGDelegate() { if (pngDelegate == null) { // There's always a PNG writer... pngDelegate = ImageIO.getImageWritersByFormatName("PNG").next(); pngDelegate.setLocale(getLocale()); pngDelegate.addIIOWriteProgressListener(new ProgressListenerBase() { @Override public void imageProgress(ImageWriter source, float percentageDone) { processImageProgress(percentageDone); } @Override public void writeAborted(ImageWriter source) { processWriteAborted(); } }); pngDelegate.addIIOWriteWarningListener(new IIOWriteWarningListener() { @Override public void warningOccurred(ImageWriter source, int imageIndex, String warning) { processWarningOccurred(sequenceIndex, warning); } }); } return pngDelegate; }
@Test public void testUnsupportedOutput() throws IOException { assertFalse("Test is invalid, rewrite test", ImageIO.getImageWritersByFormatName("foo").hasNext()); HttpServletResponse response = mock(HttpServletResponse.class); ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, context); fakeResponse(request, imageResponse); try { // Force transcode to unsupported format imageResponse.setOutputContentType("application/xml+foo"); // Flush image to wrapped response imageResponse.flush(); fail("Should throw IOException in case of unspupported output"); } catch (IOException e) { String message = e.getMessage().toLowerCase(); assertTrue("Wrong message: " + e.getMessage(), message.contains("transcode")); assertTrue("Wrong message: " + e.getMessage(), message.contains("writer")); assertTrue("Wrong message: " + e.getMessage(), message.contains("foo")); // Failure here suggests a different error condition than the one we expected } }