Example usage for javax.imageio ImageIO getImageWritersByFormatName

List of usage examples for javax.imageio ImageIO getImageWritersByFormatName

Introduction

In this page you can find the example usage for javax.imageio ImageIO getImageWritersByFormatName.

Prototype

public static Iterator<ImageWriter> getImageWritersByFormatName(String formatName) 

Source Link

Document

Returns an Iterator containing all currently registered ImageWriter s that claim to be able to encode the named format.

Usage

From source file:org.dcm4che.tool.dcm2jpg.Dcm2Jpg.java

public static void listSupportedImageWriters(String format) {
    System.out.println(MessageFormat.format(rb.getString("writers"), format));
    Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName(format);
    while (it.hasNext()) {
        ImageWriter writer = it.next();
        ImageWriteParam param = writer.getDefaultWriteParam();
        System.out.println(MessageFormat.format(rb.getString("writer"), writer.getClass().getName(),
                param.canWriteCompressed(), param.canWriteProgressive(), param.canWriteTiles(),
                param.canOffsetTiles(),/*w w  w .j  a  v a2s  . com*/
                param.canWriteCompressed() ? Arrays.toString(param.getCompressionTypes()) : null));
    }
}

From source file:org.dcm4che2.tool.dcm2jpg.Dcm2Jpg.java

private void showImageWriters() {
    ImageWriter writer;// w w w . j  a  va  2  s.co m
    System.out.println("ImageWriters for format name:" + formatName);
    int i = 0;
    for (Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName(formatName); it.hasNext();) {
        writer = it.next();
        System.out.println("Writer[" + (i++) + "]: " + writer.getClass().getName() + ":");
        System.out.println("   Write Param:");
        ImageWriteParam param = writer.getDefaultWriteParam();
        System.out.println("       canWriteCompressed:" + param.canWriteCompressed());
        System.out.println("      canWriteProgressive:" + param.canWriteProgressive());
        System.out.println("            canWriteTiles:" + param.canWriteTiles());
        System.out.println("           canOffsetTiles:" + param.canOffsetTiles());
        if (param.canWriteCompressed()) {
            String[] types = param.getCompressionTypes();
            System.out.println("   Compression Types:");
            if (types != null && types.length > 0) {
                for (int j = 0; j < types.length; j++) {
                    System.out.println("           Type[" + j + "]:" + types[j]);
                }
            }
        }
        System.out.println("-----------------------------");
    }
}

From source file:com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.java

private byte[] getJPGBytes(BufferedImage image) {
    ByteArrayOutputStream outputStream = null;

    try {/* w  w w.  j  a  va2s. c o m*/
        ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
        ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam();
        jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        jpgWriteParam.setCompressionQuality(1.0f);

        outputStream = new ByteArrayOutputStream();
        jpgWriter.setOutput(new MemoryCacheImageOutputStream((outputStream)));
        IIOImage outputImage = new IIOImage(image, null, null);

        jpgWriter.write(null, outputImage, jpgWriteParam);
        jpgWriter.dispose();
        outputStream.flush();

        return outputStream.toByteArray();
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        closeOutputStream(outputStream);
    }
}

From source file:org.photovault.imginfo.CreateCopyImageCommand.java

/**
 Helper function to save a rendered image to file
 @param instanceFile The file into which the image will be saved
 @param img Image that willb e saved/*from   w ww.j a  v a 2 s .  co  m*/
 @param xmpData XPM metadata packet that should be saved with the image
 @throws PhotovaultException if saving does not succeed
 */
protected void saveImage(File instanceFile, RenderedImage img, byte[] xmpData) throws PhotovaultException {
    ImageOutputStream out = null;
    log.debug("Entry: saveImage, file = " + instanceFile.getAbsolutePath());
    try {
        out = new FileImageOutputStream(instanceFile);
    } catch (IOException e) {
        log.error("Error writing image: " + e.getMessage());
        throw new PhotovaultException(e.getMessage());
    }
    if (img.getSampleModel().getSampleSize(0) == 16) {
        log.debug("16 bit image, converting to 8 bits");
        double[] subtract = new double[1];
        subtract[0] = 0;
        double[] divide = new double[1];
        divide[0] = 1. / 256.;
        // Now we can rescale the pixels gray levels:
        ParameterBlock pbRescale = new ParameterBlock();
        pbRescale.add(divide);
        pbRescale.add(subtract);
        pbRescale.addSource(img);
        PlanarImage outputImage = (PlanarImage) JAI.create("rescale", pbRescale, null);
        // Make sure it is a byte image - force conversion.
        ParameterBlock pbConvert = new ParameterBlock();
        pbConvert.addSource(outputImage);
        pbConvert.add(DataBuffer.TYPE_BYTE);
        img = JAI.create("format", pbConvert);
    }

    IIOImage iioimg = new IIOImage(img, null, null);

    /*
     Not all encoders support metadata handling
     */
    Iterator writers = ImageIO.getImageWritersByFormatName("jpeg");
    ImageWriter imgwriter = null;
    while (writers.hasNext()) {
        imgwriter = (ImageWriter) writers.next();
        if (imgwriter.getClass().getName().endsWith("JPEGImageEncoder")) {
            // Break on finding the core provider.
            break;
        }
    }
    if (imgwriter == null) {
        System.err.println("Cannot find core JPEG writer!");
    }
    imgwriter.addIIOWriteWarningListener(new IIOWriteWarningListener() {

        public void warningOccurred(ImageWriter arg0, int arg1, String arg2) {
            log.warn("Warning from ImageWriter: " + arg2);
        }
    });
    ImageWriteParam params = imgwriter.getDefaultWriteParam();
    ImageTypeSpecifier its = ImageTypeSpecifier.createFromRenderedImage(img);
    IIOMetadata metadata = imgwriter.getDefaultImageMetadata(its, null);

    IIOMetadataNode metatop = (IIOMetadataNode) metadata.getAsTree("javax_imageio_jpeg_image_1.0");
    NodeList markerSeqNodes = metatop.getElementsByTagName("markerSequence");
    if (markerSeqNodes.getLength() > 0) {
        IIOMetadataNode xmpNode = new IIOMetadataNode("unknown");
        xmpNode.setAttribute("MarkerTag", "225");
        xmpNode.setUserObject(xmpData);
        markerSeqNodes.item(0).appendChild(xmpNode);
    }

    try {
        metadata.setFromTree("javax_imageio_jpeg_image_1.0", metatop);
    } catch (Exception e) {
        log.warn("error editing metadata: " + e.getMessage());
        e.printStackTrace();
        throw new PhotovaultException("error setting image metadata: \n" + e.getMessage());
    }

    iioimg.setMetadata(metadata);

    try {
        imgwriter.setOutput(out);
        imgwriter.write(iioimg);
    } catch (IOException e) {
        log.warn("Exception while encoding" + e.getMessage());
        throw new PhotovaultException(
                "Error writing instance " + instanceFile.getAbsolutePath() + ": " + e.getMessage());
    } finally {
        try {
            out.close();
        } catch (IOException e) {
            log.warn("Exception while closing file: " + e.getMessage());
            imgwriter.dispose();
            throw new PhotovaultException(
                    "Error writing instance " + instanceFile.getAbsolutePath() + ": " + e.getMessage());

        }
        imgwriter.dispose();
    }
    log.debug("Exit: saveImage");
}

From source file:org.gallery.web.controller.ImageController.java

public static boolean compressImg(BufferedImage src, File outfile, double d) {
    FileOutputStream out = null;//from   w ww .j  a v  a 2  s.  com
    ImageWriter imgWrier;
    ImageWriteParam imgWriteParams;

    // ? jpg
    imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
    imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(null);
    // ??MODE_EXPLICIT
    imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
    // ?qality?0~1
    imgWriteParams.setCompressionQuality((float) d);
    imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
    ColorModel colorModel = ColorModel.getRGBdefault();
    // ?
    imgWriteParams.setDestinationType(
            new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16)));

    try {
        out = new FileOutputStream(outfile);
        imgWrier.reset();
        //  out?write, ImageOutputStream?
        // OutputStream
        imgWrier.setOutput(ImageIO.createImageOutputStream(out));
        // write???
        imgWrier.write(null, new IIOImage(src, null, null), imgWriteParams);
        out.flush();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

From source file:org.olat.core.commons.services.image.spi.ImageHelperImpl.java

/**
 * Can change this to choose a better compression level as the default
 * @param image/*w w w  .ja  v  a2  s. com*/
 * @param scaledImage
 * @return
 */
public static boolean writeTo(BufferedImage image, File scaledImage, Size scaledSize, String outputFormat) {
    try {
        if (!StringHelper.containsNonWhitespace(outputFormat)) {
            outputFormat = OUTPUT_FORMAT;
        }

        Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(outputFormat);
        if (writers.hasNext()) {
            ImageWriter writer = writers.next();
            ImageWriteParam iwp = getOptimizedImageWriteParam(writer, scaledSize);
            IIOImage iiOImage = new IIOImage(image, null, null);
            ImageOutputStream iOut = new FileImageOutputStream(scaledImage);
            writer.setOutput(iOut);
            writer.write(null, iiOImage, iwp);
            writer.dispose();
            iOut.flush();
            iOut.close();
            return true;
        } else {
            return ImageIO.write(image, outputFormat, scaledImage);
        }
    } catch (IOException e) {
        return false;
    }
}

From source file:org.nekorp.workflow.desktop.servicio.reporte.orden.servicio.OrdenServicioDataFactory.java

private void saveJPG(BufferedImage img, File file) {
    ImageWriter writer = null;/*  w  w  w . j ava  2  s  .c om*/
    FileImageOutputStream output = null;
    try {
        writer = ImageIO.getImageWritersByFormatName("jpeg").next();
        ImageWriteParam param = writer.getDefaultWriteParam();
        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        param.setCompressionQuality(1);
        output = new FileImageOutputStream(file);
        writer.setOutput(output);
        IIOImage iioImage = new IIOImage(img, null, null);
        writer.write(null, iioImage, param);
    } catch (IOException ex) {
        throw new RuntimeException(ex);
    } finally {
        try {
            if (writer != null) {
                writer.dispose();
            }
            if (output != null) {
                output.close();
            }
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
    }
}

From source file:org.olat.core.commons.services.image.spi.ImageHelperImpl.java

/**
 * Can change this to choose a better compression level as the default
 * @param image/* w w  w  .  j av  a 2s. c  o m*/
 * @param scaledImage
 * @return
 */
private static boolean writeTo(BufferedImage image, OutputStream scaledImage, Size scaledSize,
        String outputFormat) {
    try {
        if (!StringHelper.containsNonWhitespace(outputFormat)) {
            outputFormat = OUTPUT_FORMAT;
        }

        Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(outputFormat);
        if (writers.hasNext()) {
            ImageWriter writer = writers.next();
            ImageWriteParam iwp = getOptimizedImageWriteParam(writer, scaledSize);
            IIOImage iiOImage = new IIOImage(image, null, null);
            ImageOutputStream iOut = new MemoryCacheImageOutputStream(scaledImage);
            writer.setOutput(iOut);
            writer.write(null, iiOImage, iwp);
            writer.dispose();
            iOut.flush();
            iOut.close();
            return true;
        } else {
            return ImageIO.write(image, outputFormat, scaledImage);
        }
    } catch (IOException e) {
        return false;
    }
}

From source file:net.rptools.maptool.client.ui.ExportDialog.java

/**
 * This is the top-level screen-capture routine. It sends the resulting PNG
 * image to the location previously selected by the user. TODO: It currently
 * calls {@link MapTool#takeMapScreenShot()} for "normal" screenshots, but
 * that's just until this code is considered stable enough.
 * /* w ww.  j  a v  a 2s .  co m*/
 * @throws Exception
 */
@SuppressWarnings("unused")
public void screenCapture() throws Exception {
    MapTool.getFrame().setStatusMessage(I18N.getString("dialog.screenshot.msg.GeneratingScreenshot"));
    ExportRadioButtons type = ExportRadioButtons.getType();
    Player.Role role;
    try {
        switch (type) {
        case TYPE_CURRENT_VIEW:
            // This uses the original screenshot code: I didn't want to touch it, so I need
            // to pass it the same parameter it took before.
            role = ExportRadioButtons.VIEW_GM.isChecked() ? Player.Role.GM : Player.Role.PLAYER;
            BufferedImage screenCap = MapTool.takeMapScreenShot(renderer.getPlayerView(role));
            // since old screenshot code doesn't throw exceptions, look for null
            if (screenCap == null) {
                throw new Exception(I18N.getString("dialog.screenshot.error.failedImageGeneration"));
            }
            MapTool.getFrame().setStatusMessage(I18N.getString("dialog.screenshot.msg.screenshotStreaming"));
            ByteArrayOutputStream imageOut = new ByteArrayOutputStream();
            try {
                ImageIO.write(screenCap, "png", imageOut);
                screenCap = null; // Free up the memory as soon as possible
                MapTool.getFrame().setStatusMessage(I18N.getString("dialog.screenshot.msg.screenshotSaving"));
                exportLocation
                        .putContent(new BufferedInputStream(new ByteArrayInputStream(imageOut.toByteArray())));
            } finally {
                IOUtils.closeQuietly(imageOut);
            }
            MapTool.getFrame().setStatusMessage(I18N.getString("dialog.screenshot.msg.screenshotSaved"));
            break;
        case TYPE_ENTIRE_MAP:
            switchToWaitPanel();
            if (interactPanel.isSelected("METHOD_BUFFERED_IMAGE")
                    || interactPanel.isSelected("METHOD_IMAGE_WRITER")) {
                // Using a buffer in memory for the whole image
                try {
                    final PlayerView view = preScreenshot();
                    final ImageWriter pngWriter = ImageIO.getImageWritersByFormatName("png").next();
                    MapTool.getFrame()
                            .setStatusMessage(I18N.getString("dialog.screenshot.msg.screenshotStreaming"));

                    BufferedImage image;
                    if (interactPanel.isSelected("METHOD_BUFFERED_IMAGE")) {
                        image = new BufferedImage(renderer.getWidth(), renderer.getHeight(),
                                Transparency.OPAQUE);
                        final Graphics2D g = image.createGraphics();
                        //                     g.setClip(0, 0, renderer.getWidth(), renderer.getHeight());
                        renderer.renderZone(g, view);
                        g.dispose();
                    } else {
                        image = new ZoneImageGenerator(renderer, view);
                    }
                    // putContent() can consume quite a bit of time; really should have a progress
                    // meter of some kind here.
                    exportLocation.putContent(pngWriter, image);
                    if (image instanceof ZoneImageGenerator) {
                        log.debug("ZoneImageGenerator() stats: " + image.toString());
                    }
                    MapTool.getFrame()
                            .setStatusMessage(I18N.getString("dialog.screenshot.msg.screenshotSaving"));
                } catch (Exception e) {
                    MapTool.getFrame()
                            .setStatusMessage(I18N.getString("dialog.screenshot.error.failedImageGeneration"));
                } finally {
                    postScreenshot();
                    MapTool.getFrame()
                            .setStatusMessage(I18N.getString("dialog.screenshot.msg.screenshotSaved"));
                }
            } else if (interactPanel.isSelected("METHOD_BACKGROUND")) {
                // We must call preScreenshot before creating the ZoneImageGenerator, because
                // ZoneImageGenerator uses the ZoneRenderer's bounds to set itself up

                MapTool.showError("This doesn't work! Try one of the other methods.", null);
                if (false) {
                    //
                    // Note: this implementation is the obvious way, which doesn't work, since
                    // ZoneRenderer is part of the Swing component chain, and the threads get deadlocked.
                    //
                    // The suggested implementation by
                    // "Reiger" at http://ubuntuforums.org/archive/index.php/t-1455270.html
                    // might work... except that it would have to be part of ZoneRenderer
                    //
                    // The only way to make this really work is to pull the renderZone function
                    // out of ZoneRenderer into a new class: call it ZoneRasterizer. Then make
                    // ZoneRenderer create an instance of it, and patch up the code to make it
                    // compatible. Then we can create an instance of ZoneRasterizer, and run it
                    // in a separate thread, since it won't lock in any of the functions that
                    // Swing uses.
                    //
                    class backscreenRender implements Runnable {
                        public void run() {
                            try {
                                PlayerView view = preScreenshot();
                                final ZoneImageGenerator zoneImageGenerator = new ZoneImageGenerator(renderer,
                                        view);
                                final ImageWriter pngWriter = ImageIO.getImageWritersByFormatName("png").next();
                                exportLocation.putContent(pngWriter, zoneImageGenerator);
                                // postScreenshot is called by the callback imageComplete()
                            } catch (Exception e) {
                                assert false : "Unhandled Exception in renderOffScreen: '" + e.getMessage()
                                        + "'";
                            }
                        }
                    }
                    backscreenRender p = new backscreenRender();
                    new Thread(p).start();
                    repaint();
                }
            } else {
                throw new Exception("Unknown rendering method!");
            }
            break;
        default:
            throw new Exception(I18N.getString("dialog.screenshot.error.invalidDialogSettings"));
        }
    } catch (OutOfMemoryError e) {
        MapTool.showError("screenCapture() caught: Out Of Memory", e);
    } catch (Exception ex) {
        MapTool.showError("screenCapture() caught: ", ex);
    }
}