Example usage for javax.imageio ImageIO createImageInputStream

List of usage examples for javax.imageio ImageIO createImageInputStream

Introduction

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

Prototype

public static ImageInputStream createImageInputStream(Object input) throws IOException 

Source Link

Document

Returns an ImageInputStream that will take its input from the given Object .

Usage

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

public void convert(File src, File dest) throws IOException {
    ImageInputStream iis = ImageIO.createImageInputStream(src);
    try {/*from   www.  ja  va2s. c  o m*/
        BufferedImage bi = readImage(iis);
        bi = convert(bi);
        dest.delete();
        ImageOutputStream ios = ImageIO.createImageOutputStream(dest);
        try {
            writeImage(ios, bi);
        } finally {
            try {
                ios.close();
            } catch (IOException ignore) {
            }
        }
    } finally {
        try {
            iis.close();
        } catch (IOException ignore) {
        }
    }
}

From source file:org.exoplatform.wcm.ext.component.activity.FileUIActivity.java

protected int getImageWidth(Node node) {
    int imageWidth = 0;
    try {/*from  ww w  .  j a va 2s .c om*/
        if (node.hasNode(NodetypeConstant.JCR_CONTENT))
            node = node.getNode(NodetypeConstant.JCR_CONTENT);
        ImageReader reader = ImageIO.getImageReadersByMIMEType(mimeType).next();
        ImageInputStream iis = ImageIO.createImageInputStream(node.getProperty("jcr:data").getStream());
        reader.setInput(iis, true);
        imageWidth = reader.getWidth(0);
        iis.close();
        reader.dispose();
    } catch (Exception e) {
        LOG.info("Cannot get node");
    }
    return imageWidth;
}

From source file:org.hippoecm.frontend.plugins.gallery.imageutil.ImageUtils.java

/**
 * Converts image raster data to a JPEG with RGB color space. Only images with color space CMYK and YCCK are
 * converted, other images are left untouched.
 *
 * Rationale: Java's ImageIO can't process 4-component images and Java2D can't apply AffineTransformOp either,
 * so we have to convert raster data to a JPG with RGB color space.
 *
 * The technique used in this method is due to Mark Stephens, and free for any use. See
 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4799903 or
 * http://www.mail-archive.com/java2d-interest@capra.eng.sun.com/msg03247.html
 *
 * @param is the image data/*w w  w.j a v  a 2s. c o m*/
 * @param colorModel the color model of the image
 * @return the RGB version of the supplied image
 */
public static InputStream convertToRGB(InputStream is, ColorModel colorModel)
        throws IOException, UnsupportedImageException {
    if (colorModel != ColorModel.CMYK && colorModel != ColorModel.YCCK) {
        return is;
    }

    // Get an ImageReader.
    ImageInputStream input = ImageIO.createImageInputStream(is);

    try {
        Iterator<ImageReader> readers = ImageIO.getImageReaders(input);
        if (readers == null || !readers.hasNext()) {
            throw new UnsupportedImageException("No ImageReaders found");
        }

        ImageReader reader = readers.next();
        reader.setInput(input);
        Raster raster = reader.readRaster(0, reader.getDefaultReadParam());

        int w = raster.getWidth();
        int h = raster.getHeight();
        byte[] rgb = new byte[w * h * 3];

        switch (colorModel) {
        case YCCK: {
            float[] Y = raster.getSamples(0, 0, w, h, 0, (float[]) null);
            float[] Cb = raster.getSamples(0, 0, w, h, 1, (float[]) null);
            float[] Cr = raster.getSamples(0, 0, w, h, 2, (float[]) null);
            float[] K = raster.getSamples(0, 0, w, h, 3, (float[]) null);

            for (int i = 0, imax = Y.length, base = 0; i < imax; i++, base += 3) {
                float k = 220 - K[i], y = 255 - Y[i], cb = 255 - Cb[i], cr = 255 - Cr[i];

                double val = y + 1.402 * (cr - 128) - k;
                val = (val - 128) * .65f + 128;
                rgb[base] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff : (byte) (val + 0.5);

                val = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128) - k;
                val = (val - 128) * .65f + 128;
                rgb[base + 1] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff : (byte) (val + 0.5);

                val = y + 1.772 * (cb - 128) - k;
                val = (val - 128) * .65f + 128;
                rgb[base + 2] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff : (byte) (val + 0.5);
            }
            break;
        }
        case CMYK: {
            int[] C = raster.getSamples(0, 0, w, h, 0, (int[]) null);
            int[] M = raster.getSamples(0, 0, w, h, 1, (int[]) null);
            int[] Y = raster.getSamples(0, 0, w, h, 2, (int[]) null);
            int[] K = raster.getSamples(0, 0, w, h, 3, (int[]) null);

            for (int i = 0, imax = C.length, base = 0; i < imax; i++, base += 3) {
                int c = 255 - C[i];
                int m = 255 - M[i];
                int y = 255 - Y[i];
                int k = 255 - K[i];
                float kk = k / 255f;

                rgb[base] = (byte) (255 - Math.min(255f, c * kk + k));
                rgb[base + 1] = (byte) (255 - Math.min(255f, m * kk + k));
                rgb[base + 2] = (byte) (255 - Math.min(255f, y * kk + k));
            }
            break;
        }
        }

        // from other image types we know InterleavedRaster's can be
        // manipulated by AffineTransformOp, so create one of those.
        raster = Raster.createInterleavedRaster(new DataBufferByte(rgb, rgb.length), w, h, w * 3, 3,
                new int[] { 0, 1, 2 }, null);

        ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
        java.awt.image.ColorModel cm = new ComponentColorModel(cs, false, true, Transparency.OPAQUE,
                DataBuffer.TYPE_BYTE);
        BufferedImage convertedImage = new BufferedImage(cm, (WritableRaster) raster, true, null);

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(convertedImage, "jpg", os);

        return new ByteArrayInputStream(os.toByteArray());
    } finally {
        IOUtils.closeQuietly(is);
        if (input != null) {
            input.close();
        }
    }
}

From source file:org.n52.v3d.terrainserver.profileservice.ProfileServlet.java

/**
 * bearbeitet HTTP-Get-Anfragen an das Servlet.<p>
 * @param pRequest HTTP-Anfrage-Objekt//from   w  w w  . ja  v  a  2 s. co m
 * @param pResponse HTTP-Antwort-Objekt
 * @throws ServletException
 * @throws IOException
 */
public void doGet(HttpServletRequest pRequest, HttpServletResponse pResponse)
        throws ServletException, IOException {
    T3dTimeList lTimeProt = new T3dTimeList(); // zur Protokollierung der Rechenzeiten
    lTimeProt.addTimeStamp("init");

    // Eindeutigen Temporrdatei-Rumpf fr aktuelle Anfrage festlegen:
    String lTmpName = "~" + (mCounter++) + "_" + new java.util.Date().getTime();

    try {
        // Request-Parameter holen:
        HttpRequestParams lReqParams = this.fetchRequestParameters(pRequest);
        String lRequest = (String) lReqParams.getParameterValue("REQUEST");
        VgLineString lDefLine = (VgLineString) lReqParams.getParameterValue("DEFLINE");
        String lSRS = (String) lReqParams.getParameterValue("SRS");
        String lFormat = (String) lReqParams.getParameterValue("FORMAT");
        int lWidth = ((Integer) lReqParams.getParameterValue("WIDTH")).intValue();
        int lHeight = ((Integer) lReqParams.getParameterValue("HEIGHT")).intValue();
        double lExaggeration = ((Double) lReqParams.getParameterValue("EXAGGERATION")).doubleValue(); // todo sinnvoll?
        //int lVisAdds = ((Integer) lReqParams.getParameterValue("VISADDS")).intValue();
        VgPoint lPoint = (VgPoint) lReqParams.getParameterValue("POINT");

        if (lRequest.equalsIgnoreCase("GetCapabilities")) {
            HttpStandardResponse response = new HttpStandardResponse();
            response.sendXMLFile(mCapabilitiesFile, pResponse); // todo: serverrun/Capabilities.xml einrichten und web.xml-Additions
            this.logGetCapabilitiesInfo(lTmpName, pRequest);
            return;
        }

        if (!(lRequest.equalsIgnoreCase("GetGraph") || lRequest.equalsIgnoreCase("GetElevation")))
            throw new T3dException("Illegal request type " + lRequest + "...");

        // Request-Parameter aufbereiten und Wertebereiche prfen:
        ParameterPreparer pp = new ParameterPreparer();
        lSRS = pp.prepareSRS(lSRS);
        lFormat = pp.prepareFORMAT(lFormat, lRequest);
        if (lRequest.equalsIgnoreCase("GetGraph")) {
            lWidth = pp.prepareWIDTH(lWidth);
            lHeight = pp.prepareHEIGHT(lHeight);
        }
        if (lRequest.equalsIgnoreCase("GetElevation")) {
            String str = "" + lPoint.getX() + "," + lPoint.getY()
                    + ",0.0," /* erster Eckpunkt = Interpolationspunkt */
                    + lPoint.getX() + "," + lPoint.getY() + ",0.0"; /* zweiter Eckpunkt als Hilfspunkt */
            lDefLine = new GmLineString(str);
            if (lPoint instanceof VgPoint) {
                lPoint.setSRS(lSRS);
            }
        }

        sLogger.debug("ProfileServlet (" + lTmpName + "): Received " + lRequest + " request.");
        lTimeProt.setFinished("init");

        // Hhenmodell berechnen (Gridding):
        lTimeProt.addTimeStamp("dem_access");
        final boolean lDebug = false; // todo: auf 'false' setzen
        if (lDebug)
            System.out.println("lDefLine = " + lDefLine);
        VgEnvelope lBBox = lDefLine.envelope();
        lBBox.setSRS(lSRS);
        lBBox = this.assureBBoxExtent(lBBox);
        if (lDebug)
            System.out.println("lBBox = " + lBBox);
        GmSimpleElevationGrid lTerrain = this.setUpTerrain(lBBox);
        if (lDebug) {
            System.out.println("lTerrain = " + lTerrain);
            System.out.println("lTerrain.envelope = " + lTerrain.getGeometry().envelope());
        }
        lTimeProt.setFinished("dem_access");

        // Profil generieren:
        lTimeProt.addTimeStamp("profile_generation");
        FltElevationGrid2Profile lProc = new FltElevationGrid2Profile();
        VgProfile lProfile = lProc.transform(lTerrain, lDefLine);
        lTimeProt.setFinished("profile_generation");

        if (lRequest.equalsIgnoreCase("GetGraph")) {
            // Ergebnisbild generieren:
            lTimeProt.addTimeStamp("rendering");
            IoProfileWriter lWriter = new IoProfileWriter("SVG"); // stets SVG generieren
            String lResFile = mWorkingDirectory + "/" + lTmpName + ".svg";
            lWriter.writeToFile(lProfile, lResFile);
            boolean lSendAsPngImage = false;
            String lResFilePng = "";
            if (lFormat.equalsIgnoreCase("image/png"))
                lSendAsPngImage = true;
            if (lSendAsPngImage) {
                PNGTranscoder lTranscoder = new PNGTranscoder();
                String lSvgURI = new File(lResFile).toURL().toString();
                TranscoderInput lInput = new TranscoderInput(lSvgURI);
                lResFilePng = mWorkingDirectory + "/" + lTmpName + ".png";
                OutputStream lOStream = new FileOutputStream(lResFilePng);
                TranscoderOutput lOutput = new TranscoderOutput(lOStream);
                lTranscoder.transcode(lInput, lOutput);
                lOStream.flush();
                lOStream.close();
            }
            lTimeProt.setFinished("rendering");

            // Ergebnisbild als Antwort senden:
            lTimeProt.addTimeStamp("send_response");
            if (!lSendAsPngImage) {
                pResponse.setContentType("image/svg+xml"); // MIME-Typ fr Antwort setzen
                BufferedReader lDatRead;
                try {
                    lDatRead = new BufferedReader(new FileReader(lResFile));
                } catch (FileNotFoundException e) {
                    throw new T3dException("Internal error while reading \"" + lResFile + "\".");
                }
                PrintWriter out = pResponse.getWriter(); // PrintWriter auf die Antwort aufsetzen
                String line = lDatRead.readLine();
                while (line != null) { // generierte Temporrdatei zeilenweise senden
                    out.println(line);
                    line = lDatRead.readLine();
                }
                lDatRead.close();
                out.flush();
                out.close();
            } else {
                // Bild senden (vgl. Code aus WebTerrainServlet:
                try {
                    File f = new File(lResFilePng);
                    ImageInputStream is = ImageIO.createImageInputStream(f);
                    Iterator iter = ImageIO.getImageReaders(is); // liefert PNG-ImageReader
                    ImageReader reader = (ImageReader) iter.next();
                    reader.setInput(is, true); // seek forward only?
                    BufferedImage lImage = reader.read(0);

                    OutputStream out = pResponse.getOutputStream();
                    ImageIO.setUseCache(false); // wichtig!
                    pResponse.setContentType(lFormat); // MIME-Typ fr Antwort setzen
                    String resExt = MimeTypeHelper.getFileExtension(lFormat);
                    try {
                        ImageIO.write(lImage, resExt, out); // resExt ist informaler Formatname...
                    } catch (Exception e) {
                        throw new T3dException("Did not finish PNG image send process. " + e.getMessage(), 103); // todo fehler-nr. prfen und in doku
                    }
                    is.close();
                    out.close();
                } catch (IOException e) {
                    throw new T3dException(
                            "An I/O exception occured. The servlet could not send an image reponse.", 106); // todo fehler-nr. prfen und in doku
                }
            }
            File fSvg = new File(lResFile);
            fSvg.delete();
            if (lSendAsPngImage) {
                File fPng = new File(lResFilePng);
                fPng.delete();
            }
            lTimeProt.setFinished("send_response");
        } else {
            if (lRequest.equalsIgnoreCase("GetElevation")) {
                lTimeProt.addTimeStamp("send_response");
                double x, y, z;
                try {
                    x = ((VgLineString) (lProfile.getGeometry())).getVertex(0).getX(); // = lPoint.getX()
                    y = ((VgLineString) (lProfile.getGeometry())).getVertex(0).getY(); // = lPoint.getY()
                    z = (lProfile.getTZPair(0))[1];
                } catch (Throwable e) {
                    throw new T3dException("No elevation information available.");
                }

                // Antwort senden:
                short lCase = 0;
                if (lFormat.equalsIgnoreCase("text/plain"))
                    lCase = 1;
                if (lFormat.equalsIgnoreCase("text/xml"))
                    lCase = 2;
                if (lFormat.equalsIgnoreCase("text/html"))
                    lCase = 3;
                if (lFormat.equalsIgnoreCase("text/comma-separated-values"))
                    lCase = 4;
                if (lCase <= 0)
                    throw new T3dException("Internal servlet error."); // Kann nicht auftreten
                pResponse.setContentType(lFormat); // MIME-Typ fr Antwort setzen
                PrintWriter out = pResponse.getWriter(); // PrintWriter auf die Antwort aufsetzen
                switch (lCase) {
                case 1:
                    out.println("Position:");
                    out.println("SRS: " + lPoint.getSRS()); // = lSRS
                    out.println("X = " + x);
                    out.println("Y = " + y);
                    out.println("");
                    out.println("Elevation = " + z);
                    break;
                case 2:
                    out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"no\" ?>");
                    out.println("<ServiceResponse>");
                    out.println("  <Position>");
                    out.println("    <SRS>" + lPoint.getSRS() + "</SRS>"); // = lSRS
                    out.println("    <X>" + x + "</X>");
                    out.println("    <Y>" + y + "</Y>");
                    out.println("  </Position>");
                    out.println("  <Elevation>" + z + "</Elevation>");
                    out.println("</ServiceResponse>");
                    break;
                case 3:
                    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
                    out.println("<html>");
                    out.println("<head>");
                    out.println("<title>52N terrainServer elevation information</title>");
                    out.println("<font face=\"Verdana, Arial, Helvetica\" size=1>");
                    out.println("<meta http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">");
                    out.println("<body text=#000000 bgColor=#ffffff leftMargin=0 topMargin=0>");
                    out.println("<table border=\"1\">");
                    out.println("<tr><td><b>Position:</b></td><td><br></td></tr>");
                    out.println("<tr><td>SRS:</td><td>" + lPoint.getSRS() + "</td></tr>"); // lPoint.getSRS() = lSRS
                    out.println("<tr><td>X:</td><td>" + x + "<td></tr>");
                    out.println("<tr><td>Y:</td><td>" + y + "<td></tr>");
                    out.println("<tr><td><b>Elevation:</b></td><td>" + z + "<td></tr>");
                    out.println("</table>");
                    out.println("</html>");
                    break;
                case 4:
                    out.println(z);
                    break;
                }
                out.flush();
                out.close();
                lTimeProt.setFinished("send_response");
            }
        }

        //String lOutputFormatInfo = lFormat + " (" + lWidth + "x" + lHeight + ")";
        if (lRequest.equalsIgnoreCase("GetGraph"))
            this.logGetGraphInfo(lTmpName, lTerrain, lDefLine, lTimeProt, pRequest,
                    lFormat /*lOutputFormatInfo*/);
        else {
            if (lRequest.equalsIgnoreCase("GetElevation"))
                this.logGetElevationInfo(lTmpName, lTerrain, lPoint, lTimeProt, pRequest, lFormat);
        }

        sLogger.debug("ProfileServlet (" + lTmpName + "): Duly finished execution.");
    } catch (Throwable e) {
        sLogger.debug("ProfileServlet (" + lTmpName + "): Aborting execution. Error: " + e.getMessage());

        HttpStandardResponse response = new HttpStandardResponse();
        try {
            response.sendException(e.getMessage(), pResponse);
        } catch (Throwable e2) {
            try {
                response.sendException(e.getMessage(), pResponse);
            } catch (Throwable e3) {
                System.out.println("ProfileServlet: FATAL ERROR - " + e3.getMessage());
            }
        }
        try {
            this.logErrorInfo(lTmpName, lTimeProt, pRequest, e);
        } catch (Throwable e2) {
            System.out.println("ProfileServlet: FATAL ERROR - " + e2.getMessage());
        }
    }
}

From source file:org.exoplatform.wcm.ext.component.activity.FileUIActivity.java

protected int getImageHeight(Node node) {
    int imageHeight = 0;
    try {/*from   www .j  a v  a  2  s .  c om*/
        if (node.hasNode(NodetypeConstant.JCR_CONTENT))
            node = node.getNode(NodetypeConstant.JCR_CONTENT);
        ImageReader reader = ImageIO.getImageReadersByMIMEType(mimeType).next();
        ImageInputStream iis = ImageIO.createImageInputStream(node.getProperty("jcr:data").getStream());
        reader.setInput(iis, true);
        imageHeight = reader.getHeight(0);
        iis.close();
        reader.dispose();
    } catch (Exception e) {
        LOG.info("Cannot get node");
    }
    return imageHeight;
}

From source file:org.geotools.utils.imagemosaic.MosaicIndexBuilder.java

/**
 * Main thread for the mosaic index builder.
 *//*w  ww  . j av  a2  s . c  o  m*/
public void run() {

    // /////////////////////////////////////////////////////////////////////
    //
    // CREATING INDEX FILE
    //
    // /////////////////////////////////////////////////////////////////////

    // /////////////////////////////////////////////////////////////////////
    //
    // Create a file handler that write log record to a file called
    // my.log
    //
    // /////////////////////////////////////////////////////////////////////
    FileHandler handler = null;
    try {
        boolean append = true;
        handler = new FileHandler(new StringBuffer(locationPath).append("/error.txt").toString(), append);
        handler.setLevel(Level.SEVERE);
        // Add to the desired logger
        LOGGER.addHandler(handler);

        // /////////////////////////////////////////////////////////////////////
        //
        // Create a set of file names that have to be skipped since these are
        // our metadata files
        //
        // /////////////////////////////////////////////////////////////////////
        final Set<String> skipFiles = new HashSet<String>(
                Arrays.asList(new String[] { indexName + ".shp", indexName + ".dbf", indexName + ".shx",
                        indexName + ".prj", "error.txt", "error.txt.lck", indexName + ".properties" }));

        // /////////////////////////////////////////////////////////////////////
        //
        // Creating temp vars
        //
        // /////////////////////////////////////////////////////////////////////
        ShapefileDataStore index = null;
        Transaction t = new DefaultTransaction();
        // declaring a preciosion model to adhere the java double type
        // precision
        PrecisionModel precMod = new PrecisionModel(PrecisionModel.FLOATING);
        GeometryFactory geomFactory = new GeometryFactory(precMod);
        try {
            index = new ShapefileDataStore(
                    new File(locationPath + File.separator + indexName + ".shp").toURI().toURL());
        } catch (MalformedURLException ex) {
            if (LOGGER.isLoggable(Level.SEVERE))
                LOGGER.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
            fireException(ex);
            return;
        }

        final List<File> files = new ArrayList<File>();
        recurse(files, locationPath);

        // /////////////////////////////////////////////////////////////////////
        //
        // Cycling over the files that have filtered out
        //
        // /////////////////////////////////////////////////////////////////////
        numFiles = files.size();
        String validFileName = null;
        final Iterator<File> filesIt = files.iterator();
        FeatureWriter<SimpleFeatureType, SimpleFeature> fw = null;
        boolean doneSomething = false;
        for (int i = 0; i < numFiles; i++) {

            StringBuffer message;
            // //
            //
            // Check that this file is actually good to go
            //
            // //         
            final File fileBeingProcessed = ((File) filesIt.next());
            if (!fileBeingProcessed.exists() || !fileBeingProcessed.canRead() || !fileBeingProcessed.isFile()) {
                // send a message
                message = new StringBuffer("Skipped file ").append(files.get(i))
                        .append(" snce it seems invalid.");
                if (LOGGER.isLoggable(Level.INFO))
                    LOGGER.info(message.toString());
                fireEvent(message.toString(), ((i * 99.0) / numFiles));
                continue;
            }

            // //
            //
            // Anyone has asked us to stop?
            //
            // //
            if (getStopThread()) {
                message = new StringBuffer("Stopping requested at file  ").append(i).append(" of ")
                        .append(numFiles).append(" files");
                if (LOGGER.isLoggable(Level.FINE)) {
                    LOGGER.fine(message.toString());
                }
                fireEvent(message.toString(), ((i * 100.0) / numFiles));
                return;
            } // replacing chars on input path
            try {
                validFileName = fileBeingProcessed.getCanonicalPath();
            } catch (IOException e1) {
                fireException(e1);
                return;
            }
            validFileName = validFileName.replace('\\', '/');
            validFileName = validFileName.substring(locationPath.length() + 1,
                    fileBeingProcessed.getAbsolutePath().length());
            if (skipFiles.contains(validFileName))
                continue;
            message = new StringBuffer("Now indexing file ").append(validFileName);

            if (LOGGER.isLoggable(Level.FINE)) {
                LOGGER.fine(message.toString());
            }
            fireEvent(message.toString(), ((i * 100.0) / numFiles));
            try {
                // ////////////////////////////////////////////////////////
                //
                //
                // STEP 1
                // Getting an ImageIO reader for this coverage.
                //
                //
                // ////////////////////////////////////////////////////////
                ImageInputStream inStream = ImageIO.createImageInputStream(fileBeingProcessed);
                if (inStream == null) {
                    if (LOGGER.isLoggable(Level.SEVERE))
                        LOGGER.severe(fileBeingProcessed
                                + " has been skipped since we could not get a stream for it");
                    continue;
                }
                inStream.mark();
                final Iterator<ImageReader> it = ImageIO.getImageReaders(inStream);
                ImageReader r = null;
                if (it.hasNext()) {
                    r = (ImageReader) it.next();
                    r.setInput(inStream);
                } else {
                    // release resources
                    try {
                        inStream.close();
                    } catch (Exception e) {
                        // ignore exception
                    }
                    //               try {
                    //                  r.dispose();
                    //               } catch (Exception e) {
                    //                  // ignore exception
                    //               }

                    // send a message
                    message = new StringBuffer("Skipped file ").append(files.get(i))
                            .append(":No ImageIO readeres avalaible.");
                    if (LOGGER.isLoggable(Level.INFO))
                        LOGGER.info(message.toString());
                    fireEvent(message.toString(), ((i * 99.0) / numFiles));
                    continue;
                }

                // ////////////////////////////////////////////////////////
                //
                // STEP 2
                // Getting a coverage reader for this coverage.
                //
                // ////////////////////////////////////////////////////////
                if (LOGGER.isLoggable(Level.FINE))
                    LOGGER.fine(new StringBuffer("Getting a reader").toString());
                final AbstractGridFormat format = (AbstractGridFormat) GridFormatFinder
                        .findFormat(files.get(i));
                if (format == null || !format.accepts(files.get(i))) {
                    // release resources
                    try {
                        inStream.close();
                    } catch (Exception e) {
                        // ignore exception
                    }
                    try {
                        r.dispose();
                    } catch (Exception e) {
                        // ignore exception
                    }

                    message = new StringBuffer("Skipped file ").append(files.get(i))
                            .append(": File format is not supported.");
                    if (LOGGER.isLoggable(Level.INFO))
                        LOGGER.info(message.toString());
                    fireEvent(message.toString(), ((i * 99.0) / numFiles));
                    continue;
                }
                final AbstractGridCoverage2DReader reader = (AbstractGridCoverage2DReader) format
                        .getReader(files.get(i));
                envelope = (GeneralEnvelope) reader.getOriginalEnvelope();
                actualCRS = reader.getCrs();

                // /////////////////////////////////////////////////////////////////////
                //
                // STEP 3
                // Get the type specifier for this image and the check that the
                // image has the correct sample model and color model.
                // If this is the first cycle of the loop we initialize
                // eveything.
                //
                // /////////////////////////////////////////////////////////////////////
                final ImageTypeSpecifier its = ((ImageTypeSpecifier) r.getImageTypes(0).next());
                boolean skipFeature = false;
                if (globEnvelope == null) {
                    // /////////////////////////////////////////////////////////////////////
                    //
                    // at the first step we initialize everything that we will
                    // reuse afterwards starting with color models, sample
                    // models, crs, etc....
                    //
                    // /////////////////////////////////////////////////////////////////////
                    defaultCM = its.getColorModel();
                    if (defaultCM instanceof IndexColorModel) {
                        IndexColorModel icm = (IndexColorModel) defaultCM;
                        int numBands = defaultCM.getNumColorComponents();
                        defaultPalette = new byte[3][icm.getMapSize()];
                        icm.getReds(defaultPalette[0]);
                        icm.getGreens(defaultPalette[0]);
                        icm.getBlues(defaultPalette[0]);
                        if (numBands == 4)
                            icm.getAlphas(defaultPalette[0]);

                    }
                    defaultSM = its.getSampleModel();
                    defaultCRS = actualCRS;
                    globEnvelope = new GeneralEnvelope(envelope);

                    // /////////////////////////////////////////////////////////////////////
                    //
                    // getting information about resolution
                    //
                    // /////////////////////////////////////////////////////////////////////

                    // //
                    //
                    // get the dimension of the hr image and build the model
                    // as well as
                    // computing the resolution
                    // //
                    // resetting reader and recreating stream, turnaround for a
                    // strange imageio bug
                    r.reset();
                    try {
                        inStream.reset();
                    } catch (IOException e) {
                        inStream = ImageIO.createImageInputStream(fileBeingProcessed);
                    }
                    //let's check if we got something now
                    if (inStream == null) {
                        //skip file
                        if (LOGGER.isLoggable(Level.WARNING))
                            LOGGER.warning("Skipping file " + fileBeingProcessed.toString());
                        continue;
                    }
                    r.setInput(inStream);
                    numberOfLevels = r.getNumImages(true);
                    resolutionLevels = new double[2][numberOfLevels];
                    double[] res = getResolution(envelope, new Rectangle(r.getWidth(0), r.getHeight(0)),
                            defaultCRS);
                    resolutionLevels[0][0] = res[0];
                    resolutionLevels[1][0] = res[1];

                    // resolutions levels
                    if (numberOfLevels > 1) {

                        for (int k = 0; k < numberOfLevels; k++) {
                            res = getResolution(envelope, new Rectangle(r.getWidth(k), r.getHeight(k)),
                                    defaultCRS);
                            resolutionLevels[0][k] = res[0];
                            resolutionLevels[1][k] = res[1];
                        }
                    }

                    // /////////////////////////////////////////////////////////////////////
                    //
                    // creating the schema
                    //
                    // /////////////////////////////////////////////////////////////////////
                    final SimpleFeatureTypeBuilder featureBuilder = new SimpleFeatureTypeBuilder();
                    featureBuilder.setName("Flag");
                    featureBuilder.setNamespaceURI("http://www.geo-solutions.it/");
                    featureBuilder.add("location", String.class);
                    featureBuilder.add("the_geom", Polygon.class, this.actualCRS);
                    featureBuilder.setDefaultGeometry("the_geom");
                    final SimpleFeatureType simpleFeatureType = featureBuilder.buildFeatureType();
                    // create the schema for the new shape file
                    index.createSchema(simpleFeatureType);

                    // get a feature writer
                    fw = index.getFeatureWriter(t);
                } else {
                    // ////////////////////////////////////////////////////////
                    // 
                    // comparing ColorModel
                    // comparing SampeModel
                    // comparing CRSs
                    // ////////////////////////////////////////////////////////
                    globEnvelope.add(envelope);
                    actualCM = its.getColorModel();
                    actualSM = its.getSampleModel();
                    skipFeature = (i > 0 ? !(CRS.equalsIgnoreMetadata(defaultCRS, actualCRS)) : false);
                    if (skipFeature)
                        LOGGER.warning(new StringBuffer("Skipping image ").append(files.get(i))
                                .append(" because CRSs do not match.").toString());
                    skipFeature = checkColorModels(defaultCM, defaultPalette, actualCM);
                    if (skipFeature)
                        LOGGER.warning(new StringBuffer("Skipping image ").append(files.get(i))
                                .append(" because color models do not match.").toString());
                    // defaultCM.getNumComponents()==actualCM.getNumComponents()&&
                    // defaultCM.getClass().equals(actualCM.getClass())
                    // && defaultSM.getNumBands() == actualSM
                    // .getNumBands()
                    // && defaultSM.getDataType() == actualSM
                    // .getDataType() &&
                    //
                    // if (skipFeature)
                    // LOGGER
                    // .warning(new StringBuffer("Skipping image ")
                    // .append(files.get(i))
                    // .append(
                    // " because cm or sm does not match.")
                    // .toString());
                    // res = getResolution(envelope, new
                    // Rectangle(r.getWidth(0),
                    // r.getHeight(0)), defaultCRS);
                    // if (Math.abs((resX - res[0]) / resX) > EPS
                    // || Math.abs(resY - res[1]) > EPS) {
                    // LOGGER.warning(new StringBuffer("Skipping image
                    // ").append(
                    // files.get(i)).append(
                    // " because resolutions does not match.")
                    // .toString());
                    // skipFeature = true;
                    // }
                }

                // ////////////////////////////////////////////////////////
                //
                // STEP 4
                //
                // create and store features
                //
                // ////////////////////////////////////////////////////////
                if (!skipFeature) {

                    final SimpleFeature feature = fw.next();
                    feature.setAttribute(1,
                            geomFactory.toGeometry(new ReferencedEnvelope((Envelope) envelope)));
                    feature.setAttribute(
                            0, absolute
                                    ? new StringBuilder(this.locationPath).append(File.separatorChar)
                                            .append(validFileName).toString()
                                    : validFileName);
                    fw.write();

                    message = new StringBuffer("Done with file ").append(files.get(i));
                    if (LOGGER.isLoggable(Level.FINE)) {
                        LOGGER.fine(message.toString());
                    }
                    message.append('\n');
                    fireEvent(message.toString(), (((i + 1) * 99.0) / numFiles));
                    doneSomething = true;
                } else
                    skipFeature = false;

                // ////////////////////////////////////////////////////////
                //
                // STEP 5
                //
                // release resources
                //
                // ////////////////////////////////////////////////////////
                try {
                    inStream.close();
                } catch (Exception e) {
                    // ignore exception
                }
                try {
                    r.dispose();
                } catch (Exception e) {
                    // ignore exception
                }
                // release resources
                reader.dispose();

            } catch (IOException e) {
                fireException(e);
                break;
            } catch (ArrayIndexOutOfBoundsException e) {
                fireException(e);
                break;
            }

        }
        try {
            if (fw != null)
                fw.close();
            t.commit();
            t.close();
            index.dispose();
        } catch (IOException e) {
            LOGGER.log(Level.SEVERE, e.getLocalizedMessage(), e);
        }
        createPropertiesFiles(globEnvelope, doneSomething);
    } catch (SecurityException el) {
        fireException(el);
        return;
    } catch (IOException el) {
        fireException(el);
        return;
    } finally {
        try {
            if (handler != null)
                handler.close();
        } catch (Throwable e) {
            // ignore
        }

    }

}

From source file:org.exoplatform.wcm.notification.plugin.FileActivityChildPlugin.java

private int getImageWidth(Node node) {
    int imageWidth = 0;
    try {/*from   ww  w  . ja  v  a 2  s.  co m*/
        if (node.hasNode(NodetypeConstant.JCR_CONTENT))
            node = node.getNode(NodetypeConstant.JCR_CONTENT);
        ImageReader reader = ImageIO.getImageReadersByMIMEType(mimeType).next();
        ImageInputStream iis = ImageIO.createImageInputStream(node.getProperty("jcr:data").getStream());
        reader.setInput(iis, true);
        imageWidth = reader.getWidth(0);
        iis.close();
        reader.dispose();
    } catch (RepositoryException | IOException e) {
        if (LOG.isWarnEnabled()) {
            LOG.warn("Can not get image width in " + this.getClass().getName());
        }
    }
    return imageWidth;
}

From source file:edu.emory.library.tast.images.admin.ImagesBean.java

public String uploadNewImage() {

    try {/*w  w  w .j av a2 s  .  com*/

        if (uploadedImage == null)
            return null;

        // check type
        String extension = (String) allowedTypes.get(uploadedImage.getContentType());
        if (extension == null)
            return null;

        // new filename
        File file = null;
        String fileName = null;
        String imageDir = AppConfig.getConfiguration().getString(AppConfig.IMAGES_DIRECTORY);
        do {
            fileName = new UidGenerator().generate() + "." + extension;
            file = new File(imageDir, fileName);
        } while (file.exists());

        // copy
        FileOutputStream imgFileStream = new FileOutputStream(file);
        int size = IOUtils.copy(uploadedImage.getInputStream(), imgFileStream);
        imgFileStream.flush();
        imgFileStream.close();

        // get image info
        Iterator readerIter = ImageIO.getImageReadersByFormatName(extension);
        ImageReader rdr = (ImageReader) readerIter.next();
        if (rdr == null)
            return null;
        rdr.setInput(ImageIO.createImageInputStream(file), true);

        // get width and height
        int width = rdr.getWidth(0);
        int height = rdr.getHeight(0);

        // replace current image
        imageWidth = width;
        imageHeight = height;
        imageSize = size;
        imageMimeType = uploadedImage.getContentType();
        imageFileName = fileName;

        // all ok
        uploadBoxShown = false;

    } catch (IOException e) {
        throw new RuntimeException(e);
    }

    return null;
}

From source file:iqq.util.ImageUtil.java

/**
 * ??/* w w  w  . j  a  v  a2  s  .  c  o  m*/
 *
 * @param imageFile 
 * @return ?
 */
public static String getFormatName(File imageFile) {
    if (imageFile == null || imageFile.length() == 0) {
        return null;
    }
    try {
        String formatName = null;
        ImageInputStream imageInputStream = ImageIO.createImageInputStream(imageFile);
        Iterator<ImageReader> iterator = ImageIO.getImageReaders(imageInputStream);
        if (!iterator.hasNext()) {
            return null;
        }
        ImageReader imageReader = iterator.next();
        if (imageReader instanceof JPEGImageReader) {
            formatName = JPEG_FORMAT_NAME;
        } else if (imageReader instanceof GIFImageReader) {
            formatName = GIF_FORMAT_NAME;
        } else if (imageReader instanceof BMPImageReader) {
            formatName = BMP_FORMAT_NAME;
        } else if (imageReader instanceof PNGImageReader) {
            formatName = PNG_FORMAT_NAME;
        }
        imageInputStream.close();
        return formatName;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

From source file:org.photovault.image.ImageIOImage.java

/**
 Load the image and/or metadata//from   w w w .  ja  va2s .com
 @param loadImage Load the image pixel data if <CODE>true</CODE>
 @param loadMetadata Load image metadata if <CODE>true</CODE>.
 @param minWidth Minimum width of the loaded image
 @param minHeight Minimum height of the loaded image
 @param isLowQualityAllowed If <code>true</code>, use larger subsampling 
 to speed up loading.
 */
private void load(boolean loadImage, boolean loadMetadata, int minWidth, int minHeight,
        boolean isLowQualityAllowed) {
    if (f != null && f.canRead()) {
        ImageReader reader = getImageReader(f);
        if (reader != null) {
            log.debug("Creating stream");
            ImageInputStream iis = null;
            try {
                iis = ImageIO.createImageInputStream(f);
                reader.setInput(iis, false, false);
                width = reader.getWidth(0);
                height = reader.getHeight(0);
                if (loadImage) {
                    RenderedImage ri = null;
                    if (isLowQualityAllowed) {
                        ri = readExifThumbnail(f);
                        if (ri == null || !isOkForThumbCreation(ri.getWidth(), ri.getHeight(), minWidth,
                                minHeight, reader.getAspectRatio(0), 0.01)) {
                            /*
                             EXIF thumbnail either did not exist or was unusable,
                             try to read subsampled version of original
                             */
                            ri = readSubsampled(reader, minWidth, minHeight);
                        }
                    } else {
                        /*
                         High quality image is requested.
                                 
                         If the image is very large, use subsampling anyway
                         to decrease memory consumption & speed up interactive 
                         operations. Anyway, most often user just views image 
                         at screen resolution
                         */
                        ImageReadParam param = reader.getDefaultReadParam();

                        if (minWidth * 2 < width && minHeight * 2 < height) {
                            param.setSourceSubsampling(2, 2, 0, 0);
                        }
                        ri = reader.read(0, param);

                    }
                    if (ri != null) {
                        /*
                         TODO: JAI seems to have problems in doing convolutions
                         for large image tiles. Split image to reasonably sized
                         tiles as a workaround for this.
                         */
                        ri = new TiledImage(ri, 256, 256);
                        image = new RenderedImageAdapter(ri);
                        originalSampleModel = image.getSampleModel();
                        originalColorModel = image.getColorModel();
                        final float[] DEFAULT_KERNEL_1D = { 0.25f, 0.5f, 0.25f };
                        ParameterBlock pb = new ParameterBlock();
                        KernelJAI kernel = new KernelJAI(DEFAULT_KERNEL_1D.length, DEFAULT_KERNEL_1D.length,
                                DEFAULT_KERNEL_1D.length / 2, DEFAULT_KERNEL_1D.length / 2, DEFAULT_KERNEL_1D,
                                DEFAULT_KERNEL_1D);
                        pb.add(kernel);
                        BorderExtender extender = BorderExtender.createInstance(BorderExtender.BORDER_COPY);
                        RenderingHints hints = JAI.getDefaultInstance().getRenderingHints();
                        if (hints == null) {
                            hints = new RenderingHints(JAI.KEY_BORDER_EXTENDER, extender);
                        } else {
                            hints.put(JAI.KEY_BORDER_EXTENDER, extender);
                        }

                        RenderedOp filter = new RenderedOp("convolve", pb, hints);
                        // javax.media.jai.operator.BoxFilterDescriptor.create( null, new Integer(2), new Integer(2), new Integer(0), new Integer(0), null );

                        // Add the subsampling operation.
                        pb = new ParameterBlock();
                        pb.addSource(filter);
                        pb.add(new Float(0.5F)).add(new Float(0.5F));
                        pb.add(new Float(0.0F)).add(new Float(0.0F));
                        pb.add(Interpolation.getInstance(Interpolation.INTERP_NEAREST));
                        RenderedOp downSampler = new RenderedOp("scale", pb, null);

                        renderableImage = RenderableDescriptor.createRenderable(image, downSampler, null, null,
                                null, null, null);
                    } else {
                        image = null;
                        renderableImage = null;
                    }
                    imageIsLowQuality = isLowQualityAllowed;
                }
                if (loadMetadata) {
                    readImageMetadata(reader);
                }
            } catch (Exception ex) {
                log.warn(ex.getMessage());
                ex.printStackTrace();
                return;
            }
        }
    }
}