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:com.moviejukebox.scanner.artwork.PosterScanner.java

/**
 * Read an URL and get the dimensions of the image using a specific image
 * type/*from   w  w w  .  j av  a2s .  c  o m*/
 *
 * @param imageUrl
 * @param imageType
 * @return
 */
public static Dimension getUrlDimensions(String imageUrl, String imageType) {
    Dimension imageDimension = new Dimension(0, 0);

    @SuppressWarnings("rawtypes")
    Iterator readers = ImageIO.getImageReadersBySuffix(imageType);

    if (readers.hasNext()) {
        ImageReader reader = (ImageReader) readers.next();

        try (InputStream in = new URL(imageUrl).openStream();
                ImageInputStream iis = ImageIO.createImageInputStream(in)) {
            reader.setInput(iis, Boolean.TRUE);
            imageDimension.setSize(reader.getWidth(0), reader.getHeight(0));
        } catch (IOException ex) {
            LOG.debug("getUrlDimensions error: {}: can't open url: {}", ex.getMessage(), imageUrl);
        } finally {
            reader.dispose();
        }
    }

    return imageDimension;
}

From source file:net.naijatek.myalumni.modules.members.presentation.action.MaintainMemberAction.java

public ActionForward updateMemberAvatar(ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    ActionMessages errors = new ActionMessages();
    String fileTypes = SystemConfigConstants.CONTENT_TYPE;
    String avatarDir = getSysProp().getValue("AVATAR.FILEPATH");
    MyAlumniUserContainer continer = getUserContainer(request);

    int maxFileSize = 0;
    int maxHeight = 0;
    int maxWidth = 0;
    String overwrite = "false";

    if (isCancelled(request)) {
        return mapping.findForward(BaseConstants.FWD_CANCEL);
    }//  www.  j a  va 2s .  c o m

    MemberVO token = getCurrentLoggedInUser(request);
    MemberForm memberForm = (MemberForm) form;

    if (!memberSecurityCheck(request, token)) {
        return mapping.findForward(BaseConstants.FWD_LOGIN);
    }

    //  Set Max Size
    try {
        maxFileSize = Integer.parseInt(getAppProp().getValue("avatar.image.size").trim());
    } catch (Exception e) {
        maxFileSize = 120000; // 120000 Bytes  = 120 KB
    }

    // Set Max Height
    try {
        maxHeight = Integer.parseInt(getAppProp().getValue("avatar.image.height").trim());
    } catch (Exception e) {
        maxHeight = 200; // 200 px 
    }

    // Set Max Width
    try {
        maxWidth = Integer.parseInt(getAppProp().getValue("avatar.image.width").trim());
    } catch (Exception e) {
        maxWidth = 200; // 200 px 
    }

    FormFile importFile = memberForm.getAvatarUpload();
    overwrite = StringUtil.safeString(memberForm.getAvatarUploadOverwrite());
    String importFileName = getCurrentLoggedInUser(request).getMemberUserName() + "."
            + getFileExtensionForImageReader(importFile.getFileName());
    int size = importFile.getFileSize();

    //--------------------  VALIDATE THE IMAGE -----------------------------------------
    // check width and heigh of image
    logger.debug(importFileName + " ext = " + getFileExtensionForImageReader(importFileName));
    Iterator readers = ImageIO.getImageReadersBySuffix(getFileExtensionForImageReader(importFileName));
    ImageReader reader = (ImageReader) readers.next();

    try {
        ImageInputStream iis = ImageIO.createImageInputStream(importFile.getInputStream());
        reader.setInput(iis, true);
        int width = reader.getWidth(0);
        int height = reader.getHeight(0);
        logger.debug(importFile.getFileName() + ": width=" + width + ", height=" + height);
        if (width > maxWidth || height > maxHeight) {
            errors.add(BaseConstants.WARN_KEY,
                    new ActionMessage("error.dimensions", width, height, maxWidth, maxHeight));
            saveMessages(request, errors);
            return mapping.getInputForward();
        }
    } catch (IOException e) {
        System.err.println(e.getMessage() + ": can't open");
        errors.add(BaseConstants.FATAL_KEY, new ActionMessage("error.notreadable"));
        saveMessages(request, errors);
        return mapping.getInputForward();
    }

    // check file name
    if (importFileName.indexOf(" ") > -1) {
        errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.filename", importFileName));
        saveMessages(request, errors);
        return mapping.getInputForward();
    }

    //boolean validImageName = false;
    /*      StringTokenizer st0 = new StringTokenizer(importFileName, ".");
          if (st0.hasMoreTokens()) {
            if (token.getMemberUserName().equals(st0.nextToken())) {
              //validImageName = true;
            }
            else{
              errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.fileusername", token.getMemberUserName(),importFileName ));
              saveMessages(request, errors);
              return mapping.getInputForward();
            }
          }*/

    File f = new File(avatarDir + importFileName);
    if (f.exists() && (overwrite.equalsIgnoreCase("false") || overwrite.equalsIgnoreCase(""))) {
        continer.setOverWriteAvatar(true);
        errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.filename.exist"));
        saveMessages(request, errors);
        return mapping.getInputForward();
    }

    if (size > maxFileSize) {
        errors.add(BaseConstants.WARN_KEY,
                new ActionMessage("error.filetoobig", String.valueOf(size), String.valueOf(maxFileSize)));
        saveMessages(request, errors);
        return mapping.getInputForward();
    }

    boolean validImageExtension = false;
    StringTokenizer st = new StringTokenizer(fileTypes, ",");

    logger.debug("Current Type = " + importFile.getContentType());
    while (st.hasMoreTokens()) {
        if (importFile.getContentType().equalsIgnoreCase(st.nextToken())) {
            validImageExtension = true;
        }
    }

    // check file extension
    if (!validImageExtension) {
        errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.imageext", String.valueOf(fileTypes)));
        saveMessages(request, errors);
        return mapping.getInputForward();
    }

    // apend the file extension 
    //avatar = avatar + "." + importFile.getContentType();

    //-------------------------------------------------------------

    if (!uploadFromLocalDrive(importFile, importFileName, avatarDir)) {
        errors.add(BaseConstants.FATAL_KEY, new ActionMessage("errors.technical.difficulty"));
        saveMessages(request, errors);
        return mapping.getInputForward();
    }

    memService.updateMemberAvatar(importFileName, token.getMemberUserName(), getLastModifiedBy(request));
    continer.setOverWriteAvatar(false);
    continer.setAvatar(importFileName);
    MemberVO memberVO = memService.getMemberProfileByUserName(token.getMemberUserName());
    BeanUtils.copyProperties(memberForm, memberVO);
    return mapping.findForward(BaseConstants.FWD_SUCCESS);
}

From source file:org.geotools.utils.imageoverviews.OverviewsEmbedder.java

public void run() {
    // did we create a local private tile cache or not?
    boolean localTileCache = false;
    ///* w w  w . ja  v a2s. c om*/
    // creating the image to use for the successive
    // subsampling
    //
    TileCache baseTC = JAI.getDefaultInstance().getTileCache();

    if (baseTC == null) {
        localTileCache = true;
        final long tilecacheSize = super.getTileCacheSize();
        baseTC = JAI.createTileCache();
        baseTC.setMemoryCapacity(tilecacheSize);
        baseTC.setMemoryThreshold(0.75f);
    }

    //
    // CHECK INPUT DIRECTORIES/FILES
    //
    if (sourcePath == null) {
        fireEvent("Provided sourcePath is null", overallProgress);
        return;
    }
    // getting an image input stream to the file
    final File file = new File(sourcePath);
    final File[] files;
    int numFiles = 1;
    StringBuilder message;
    if (!file.canRead() || !file.exists()) {
        fireEvent("Provided file " + file.getAbsolutePath() + " cannot be read or does not exist", 100);
        return;
    }
    if (file.isDirectory()) {
        if (wildcardString == null) {
            fireEvent("Provided wildcardString is null", 100);
            return;
        }
        final FileFilter fileFilter = new WildcardFileFilter(wildcardString);
        files = file.listFiles(fileFilter);
        numFiles = files.length;
        if (numFiles <= 0) {
            message = new StringBuilder("No files to process!");
            if (LOGGER.isLoggable(Level.FINE)) {
                LOGGER.fine(message.toString());
            }
            fireEvent(message.toString(), 100);

        }

    } else
        files = new File[] { file };

    if (files == null || files.length == 0) {
        fireEvent("Unable to find input files for the provided wildcard " + wildcardString + " and input path "
                + sourcePath, 100);
        return;
    }
    // setting step
    overallProgressStep = 100 * 1.0 / numFiles;

    //
    // ADDING OVERVIEWS TO ALL FOUND FILES
    //
    for (fileBeingProcessed = 0; fileBeingProcessed < numFiles; fileBeingProcessed++) {

        message = new StringBuilder("Managing file  ").append(fileBeingProcessed).append(" of ")
                .append(files[fileBeingProcessed]).append(" files");
        if (LOGGER.isLoggable(Level.FINE)) {
            LOGGER.fine(message.toString());
        }

        overallProgress = overallProgressStep * fileBeingProcessed;
        fireEvent(message.toString(), overallProgress);

        if (getStopThread()) {
            message = new StringBuilder("Stopping requested at file  ").append(fileBeingProcessed)
                    .append(" of ").append(numFiles).append(" files");
            if (LOGGER.isLoggable(Level.FINE)) {
                LOGGER.fine(message.toString());
            }
            fireEvent(message.toString(), overallProgress);
            return;
        }

        ImageInputStream stream = null;
        ImageWriter writer = null;
        ImageOutputStream streamOut = null;
        RenderedOp currentImage = null;
        RenderedOp newImage = null;
        try {

            File localFile = files[fileBeingProcessed];

            //
            // get a stream
            //
            stream = ImageIO.createImageInputStream(localFile);
            if (stream == null) {

                message = new StringBuilder("Unable to create an input stream for file")
                        .append(files[fileBeingProcessed]);
                if (LOGGER.isLoggable(Level.SEVERE)) {
                    LOGGER.severe(message.toString());
                }
                fireEvent(message.toString(), overallProgress);
                break;
            }
            stream.mark();

            //
            // get a reader
            //
            final Iterator<ImageReader> it = ImageIO.getImageReaders(stream);
            if (!it.hasNext()) {
                message = new StringBuilder("Unable to find a reader for file")
                        .append(files[fileBeingProcessed]);
                if (LOGGER.isLoggable(Level.SEVERE)) {
                    LOGGER.severe(message.toString());
                }
                fireEvent(message.toString(), overallProgress);
                break;
            }
            final ImageReader reader = (ImageReader) it.next();
            stream.reset();
            stream.mark();
            // is it a geotiff reader or not?
            if (!reader.getFormatName().toLowerCase().startsWith("tif")) {
                if (LOGGER.isLoggable(Level.INFO)) {
                    LOGGER.info("Discarding input file " + files[fileBeingProcessed]
                            + " since it is not a proper tif file.");
                }
                continue;
            }

            //
            // set input
            //
            reader.setInput(stream);
            ImageLayout layout = null;
            // tiling the image if needed
            int actualTileW = reader.getTileWidth(0);
            int actualTileH = reader.getTileHeight(0);
            if (!reader.isImageTiled(0) || (reader.isImageTiled(0) && (actualTileH != tileH && tileH != -1)
                    || (actualTileW != tileW && tileW != -1))) {

                message = new StringBuilder("Retiling image  ").append(fileBeingProcessed);
                if (LOGGER.isLoggable(Level.FINE)) {
                    LOGGER.fine(message.toString());
                }
                fireEvent(message.toString(), overallProgress);
                layout = Utils.createTiledLayout(tileW, tileH, 0, 0);
            }
            stream.reset();
            reader.reset();
            reader.dispose();

            //
            // output image stream
            //
            if (externalOverviews) {
                // create a sibling file
                localFile = new File(localFile.getParent(),
                        FilenameUtils.getBaseName(localFile.getAbsolutePath()) + ".tif.ovr");
            }
            streamOut = ImageIOExt.createImageOutputStream(null, localFile);
            if (streamOut == null) {
                message = new StringBuilder("Unable to acquire an ImageOutputStream for the file ")
                        .append(files[fileBeingProcessed].toString());
                if (LOGGER.isLoggable(Level.SEVERE)) {
                    LOGGER.severe(message.toString());
                }
                fireEvent(message.toString(), 100);
                break;
            }

            //
            // Preparing to write the set of images. First of all I write
            // the first image `
            //
            // getting a writer for this reader
            writer = TIFF_IMAGE_WRITER_SPI.createWriterInstance();
            writer.setOutput(streamOut);
            writer.addIIOWriteProgressListener(writeProgressListener);
            writer.addIIOWriteWarningListener(writeProgressListener);
            ImageWriteParam param = writer.getDefaultWriteParam();

            //
            // setting tiling on the first image using writing parameters
            //
            if (tileH != -1 & tileW != -1) {
                param.setTilingMode(ImageWriteParam.MODE_EXPLICIT);
                param.setTiling(tileW, tileH, 0, 0);

            } else {
                param.setTilingMode(ImageWriteParam.MODE_EXPLICIT);
                param.setTiling(actualTileW, actualTileH, 0, 0);
            }
            if (this.compressionScheme != null && !Double.isNaN(compressionRatio)) {
                param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
                param.setCompressionType(compressionScheme);
                param.setCompressionQuality((float) this.compressionRatio);
            }

            final RenderingHints newHints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout);
            newHints.add(new RenderingHints(JAI.KEY_TILE_CACHE, baseTC));

            // read base image
            ParameterBlock pbjRead = new ParameterBlock();
            pbjRead.add(stream);
            pbjRead.add(Integer.valueOf(0));
            pbjRead.add(Boolean.FALSE);
            pbjRead.add(Boolean.FALSE);
            pbjRead.add(Boolean.FALSE);
            pbjRead.add(null);
            pbjRead.add(null);
            pbjRead.add(null);
            pbjRead.add(null);
            currentImage = JAI.create("ImageRead", pbjRead, newHints);
            message = new StringBuilder("Read original image  ").append(fileBeingProcessed);
            if (LOGGER.isLoggable(Level.FINE)) {
                LOGGER.fine(message.toString());
            }
            fireEvent(message.toString(), overallProgress);
            int i = 0;
            //
            // OVERVIEWS CYLE
            //
            for (overviewInProcess = 0; overviewInProcess < numSteps; overviewInProcess++) {

                message = new StringBuilder("Subsampling step ").append(overviewInProcess + 1)
                        .append(" of image  ").append(fileBeingProcessed);
                if (LOGGER.isLoggable(Level.FINE)) {
                    LOGGER.fine(message.toString());
                }
                fireEvent(message.toString(), overallProgress);

                // paranoiac check
                if (currentImage.getWidth() / downsampleStep <= 0
                        || currentImage.getHeight() / downsampleStep <= 0)
                    break;

                // SCALE

                // subsampling the input image using the chosen algorithm
                final SubsampleAlgorithm algorithm = SubsampleAlgorithm.valueOf(scaleAlgorithm);
                switch (algorithm) {
                case Average:
                    newImage = Utils.scaleAverage(currentImage, baseTC, downsampleStep, borderExtender);
                    break;
                case Filtered:
                    newImage = Utils.filteredSubsample(currentImage, baseTC, downsampleStep, lowPassFilter);
                    break;
                case Bilinear:
                    newImage = Utils.subsample(currentImage, baseTC, new InterpolationBilinear(),
                            downsampleStep, borderExtender);
                    break;
                case Bicubic:
                    newImage = Utils.subsample(currentImage, baseTC, new InterpolationBicubic(2),
                            downsampleStep, borderExtender);
                    break;
                case Nearest:
                    newImage = Utils.subsample(currentImage, baseTC, new InterpolationNearest(), downsampleStep,
                            borderExtender);
                    break;
                default:
                    throw new IllegalArgumentException("Invalid scaling algorithm " + scaleAlgorithm);//cannot get here

                }

                //set relevant metadata
                IIOMetadata imageMetadata = null;
                if (writer instanceof TIFFImageWriter) {
                    imageMetadata = writer.getDefaultImageMetadata(new ImageTypeSpecifier(newImage), param);
                    if (imageMetadata != null)
                        ((TIFFImageMetadata) imageMetadata).addShortOrLongField(
                                BaselineTIFFTagSet.TAG_NEW_SUBFILE_TYPE,
                                BaselineTIFFTagSet.NEW_SUBFILE_TYPE_REDUCED_RESOLUTION);
                }
                // write out
                if (!externalOverviews || i > 0)
                    writer.writeInsert(-1, new IIOImage(newImage, null, imageMetadata), param);
                else
                    writer.write(null, new IIOImage(newImage, null, imageMetadata), param);
                message = new StringBuilder("Step ").append(overviewInProcess + 1).append(" of image  ")
                        .append(fileBeingProcessed).append(" done!");
                if (LOGGER.isLoggable(Level.FINE)) {
                    LOGGER.fine(message.toString());
                }
                fireEvent(message.toString(), overallProgress);

                // switching images
                currentImage.dispose(); //dispose old image
                currentImage = newImage;

                i++;

            }

            overallProgress = 100;
            // close message
            message = new StringBuilder("Done with  image  ").append(fileBeingProcessed);
            if (LOGGER.isLoggable(Level.FINE)) {
                LOGGER.fine(message.toString());
            }
            fireEvent(message.toString(), overallProgress);
        } catch (Throwable e) {
            fireException(e);
        } finally {
            // clean up

            // clean caches if they are local
            if (localTileCache && baseTC != null)
                try {
                    baseTC.flush();
                } catch (Exception e) {
                }

            //
            // free everything
            try {
                if (streamOut != null)
                    streamOut.close();
            } catch (Throwable e) {
                if (LOGGER.isLoggable(Level.FINE))
                    LOGGER.log(Level.FINE, e.getLocalizedMessage(), e);
            }

            try {
                if (writer != null)
                    writer.dispose();
            } catch (Throwable e) {
                if (LOGGER.isLoggable(Level.FINE))
                    LOGGER.log(Level.FINE, e.getLocalizedMessage(), e);
            }

            try {
                if (currentImage != null)
                    currentImage.dispose();
            } catch (Throwable e) {
                if (LOGGER.isLoggable(Level.FINE))
                    LOGGER.log(Level.FINE, e.getLocalizedMessage(), e);
            }

            try {
                if (newImage != null)
                    newImage.dispose();
            } catch (Throwable e) {
                if (LOGGER.isLoggable(Level.FINE))
                    LOGGER.log(Level.FINE, e.getLocalizedMessage(), e);
            }

            try {
                if (stream != null)
                    stream.close();

            } catch (Throwable e) {
                if (LOGGER.isLoggable(Level.FINE))
                    LOGGER.log(Level.FINE, e.getLocalizedMessage(), e);
            }
        }
    }

    if (LOGGER.isLoggable(Level.FINE))
        LOGGER.fine("Done!!!");

}

From source file:org.geoserver.wcs.GetCoverageTest.java

/**
 * This tests just ended up throwing an exception as the coverage being encoded
 * was too large due to a bug in the scales estimation
 * /* w w w . java2 s . co m*/
 * @throws Exception
 */
@Test
public void testRotatedPost() throws Exception {
    String request = "<GetCoverage xmlns=\"http://www.opengis.net/wcs/1.1.1\" xmlns:gml=\"http://www.opengis.net/gml\"\n"
            + "             xmlns:ows11=\"http://www.opengis.net/ows/1.1\"\n"
            + "             xmlns:ows=\"http://www.opengis.net/ows/1.1\"\n"
            + "             xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \r\n" + //
            "             xmlns:wcs=\"http://schemas.opengis.net/wcs/1.1.1\"\n"
            + "             xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n" + "             service=\"WCS\"\n"
            + "             version=\"1.1.1\"\n"
            + "             xsi:schemaLocation=\"http://www.opengis.net/wcs/1.1.1 http://schemas.opengis.net/wcs/1.1.1/wcsAll.xsd\">\n"
            + "   <ows11:Identifier>RotatedCad</ows11:Identifier>\n" + "   <DomainSubset>\n"
            + "      <ows11:BoundingBox crs=\"urn:ogc:def:crs:OGC:1.3:CRS84\">\n"
            + "         <ows11:LowerCorner>7.7634301664746515 45.14713380418506</ows11:LowerCorner>\n"
            + "         <ows11:UpperCorner>7.764350661575157 45.14763319238466</ows11:UpperCorner>\n"
            + "      </ows11:BoundingBox>\n" + "   </DomainSubset>\n" + "   <Output format=\"image/tiff\"/>\n"
            + "</GetCoverage>";

    MockHttpServletResponse response = postAsServletResponse("wcs", request);

    // parse the multipart, check there are two parts
    Multipart multipart = getMultipart(response);
    assertEquals(2, multipart.getCount());
    BodyPart coveragePart = multipart.getBodyPart(1);
    assertEquals("image/tiff", coveragePart.getContentType());
    assertEquals("<theCoverage>", coveragePart.getHeader("Content-ID")[0]);

    // make sure we can read the coverage back
    ImageReader reader = ImageIO.getImageReadersByFormatName("tiff").next();
    reader.setInput(ImageIO.createImageInputStream(coveragePart.getInputStream()));
    RenderedImage image = reader.read(0);

    // check the image is suitably small (without requiring an exact size)
    assertTrue(image.getWidth() < 1000);
    assertTrue(image.getHeight() < 1000);
}

From source file:org.geoserver.wcs.GetCoverageTest.java

/**
 * This tests just ended up throwing an exception as the coverage being encoded
 * was too large due to a bug in the scales estimation
 * //ww w.j a  v a 2  s .  co m
 * @throws Exception
 */
@Test
public void testRotatedGet() throws Exception {
    String request = "wcs?&service=WCS&request=GetCoverage&version=1.1.1&identifier=RotatedCad&BoundingBox=7.7634071540971386,45.14712131948007,7.76437367395267,45.14764567708965,urn:ogc:def:crs:OGC:1.3:CRS84&Format=image/tiff";
    MockHttpServletResponse response = getAsServletResponse(request);

    // parse the multipart, check there are two parts
    Multipart multipart = getMultipart(response);
    assertEquals(2, multipart.getCount());
    BodyPart coveragePart = multipart.getBodyPart(1);
    assertEquals("image/tiff", coveragePart.getContentType());
    assertEquals("<theCoverage>", coveragePart.getHeader("Content-ID")[0]);

    // make sure we can read the coverage back
    ImageReader reader = ImageIO.getImageReadersByFormatName("tiff").next();
    reader.setInput(ImageIO.createImageInputStream(coveragePart.getInputStream()));
    RenderedImage image = reader.read(0);

    // check the image is suitably small (without requiring an exact size)
    assertTrue(image.getWidth() < 1000);
    assertTrue(image.getHeight() < 1000);
}

From source file:org.jimcat.services.imagemanager.ImageUtil.java

/**
 * get an image reader for the given file content
 * /*  w  w  w . j  a v  a  2 s. c o m*/
 * @param image
 * @return an image reader for the given content
 * @throws IOException
 */
private static ImageReader getReaderForImage(byte image[]) throws IOException {
    // resolve image using ImageIO stream
    ImageInputStream stream = ImageIO.createImageInputStream(new ByteArrayInputStream(image));

    // check if there is an image inside the stream
    Iterator iter = ImageIO.getImageReaders(stream);
    if (!iter.hasNext()) {
        // none found
        return null;
    }

    // setup reader
    ImageReader reader = (ImageReader) iter.next();
    reader.setInput(stream, true, true);

    return reader;
}

From source file:com.moviejukebox.scanner.artwork.PosterScanner.java

/**
 * Return the dimensions of a local image file
 *
 * @param imageFile//from w w  w .jav a  2 s .c  om
 * @return Dimension
 */
public static Dimension getFileImageSize(File imageFile) {
    Dimension imageSize = new Dimension(0, 0);

    ImageReader reader = null;

    try (ImageInputStream in = ImageIO.createImageInputStream(imageFile)) {
        @SuppressWarnings("rawtypes")
        Iterator readers = ImageIO.getImageReaders(in);
        if (readers.hasNext()) {
            reader = (ImageReader) readers.next();
            if (reader != null) {
                reader.setInput(in);
                return new Dimension(reader.getWidth(0), reader.getHeight(0));
            }
        }
    } catch (IOException | CMMException ex) {
        LOG.error("Failed to read image dimensions for {}", imageFile.getName());
        LOG.error("Error: {}", ex.getMessage());
        return imageSize;
    } finally {
        if (reader != null) {
            reader.dispose();
        }
    }

    return imageSize;
}

From source file:net.naijatek.myalumni.framework.struts.MyAlumniDispatchAction.java

protected ActionMessages validateUploadFile(HttpServletRequest request, FormFile uploadedFile,
        String fileAllowedTypes, int maxFileSize, boolean validateHeight, int maxHeight, boolean validateWidth,
        int maxWidth) {

    ActionMessages msgs = new ActionMessages();

    String fileName = uploadedFile.getFileName();
    int fileSize = uploadedFile.getFileSize();

    if (fileName == null || fileName.length() == 0) {
        msgs.add(BaseConstants.WARN_KEY, new ActionMessage("error.notreadable"));
    } else {/*www. j a  v  a2 s.  co  m*/
        // Check for space in file name
        if (fileName.indexOf(" ") > -1) {
            msgs.add(BaseConstants.WARN_KEY, new ActionMessage("error.filename", fileName));
        }

        // check for file size
        if (fileSize > maxFileSize) {
            msgs.add(BaseConstants.WARN_KEY, new ActionMessage("error.filetoobig", String.valueOf(fileSize),
                    String.valueOf(maxFileSize)));
        }

        boolean validExtension = false;
        StringTokenizer st = new StringTokenizer(fileAllowedTypes, ",");
        while (st.hasMoreTokens()) {
            if (uploadedFile.getContentType().equalsIgnoreCase(st.nextToken())) {
                validExtension = true;
            }
        }

        if (!validExtension) {
            msgs.add(BaseConstants.WARN_KEY,
                    new ActionMessage("error.imageext", SystemConfigConstants.CONTENT_TYPE));
        } else {
            logger.debug(fileName + " ext = " + getFileExtensionForImageReader(fileName));
            Iterator readers = ImageIO.getImageReadersBySuffix(getFileExtensionForImageReader(fileName));
            ImageReader reader = (ImageReader) readers.next();

            try {
                ImageInputStream iis = ImageIO.createImageInputStream(uploadedFile.getInputStream());
                reader.setInput(iis, true);
                int width = reader.getWidth(0);
                int height = reader.getHeight(0);
                logger.debug(uploadedFile.getFileName() + ": width=" + width + ", height=" + height);

                if (validateHeight) {
                    if (height > maxHeight) {
                        msgs.add(BaseConstants.WARN_KEY,
                                new ActionMessage("error.heightdimensions", height, maxHeight));
                    }
                }

                if (validateWidth) {
                    if (width > maxWidth || height > maxHeight) {
                        msgs.add(BaseConstants.WARN_KEY,
                                new ActionMessage("error.widthdimensions", width, maxWidth));
                    }
                }
            } catch (IOException e) {
                msgs.add(BaseConstants.FATAL_KEY, new ActionMessage("error.notreadable"));
            }
        }
    }
    return msgs;
}

From source file:org.n52.v3d.terrainserver.povraywts.WebTerrainServlet.java

/**
 * bearbeitet HTTP-Get-Anfragen an das Servlet.<p>
 * @param pRequest HTTP-Anfrage-Objekt/*from  ww  w  .  j a  v  a2s.c  o  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");

    /*
    Enumeration hnames = pRequest.getHeaderNames();
    while(hnames.hasMoreElements()){
    String header = (String) hnames.nextElement();
    Enumeration headers = pRequest.getHeaders(header);
    while (headers.hasMoreElements()) {
    System.out.println("header: " + header + ",  value=" +  (String) headers.nextElement());
    //if (header.equalsIgnoreCase("accept") && pRequest.getHeader(header).startsWith("image/"))
    //    return;
    }
    }        */

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

    // Objektdefinitionen fr Temporrdateien-Verwaltung:
    boolean lCacheScene = false;
    TempFileHandler lRequTmpMngr = null;
    boolean lKeepTempFilesInCaseOfError = false;
    TempFileHandler lSessionTmpMngr = null;

    try {
        // Request-Parameter holen:
        HttpRequestParams lReqParams = this.fetchRequestParameters(pRequest);
        String lSRS = (String) lReqParams.getParameterValue("SRS");
        String lRequest = (String) lReqParams.getParameterValue("REQUEST");
        GmEnvelope lBBox = (GmEnvelope) lReqParams.getParameterValue("BBOX");
        VgPoint lPoi;
        try {
            lPoi = (VgPoint) lReqParams.getParameterValue("POI");
        } catch (T3dException e) {
            lPoi = null;
        }
        double lYaw = ((Double) lReqParams.getParameterValue("YAW")).doubleValue();
        double lPitch = ((Double) lReqParams.getParameterValue("PITCH")).doubleValue();
        double lDistance;
        try {
            lDistance = ((Double) lReqParams.getParameterValue("DISTANCE")).doubleValue();
        } catch (T3dException e) {
            lDistance = 0.;
        }
        double lAov = ((Double) lReqParams.getParameterValue("AOV")).doubleValue();
        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();
        String lDrape = (String) lReqParams.getParameterValue("DRAPE");
        String lWmsLayers = (String) lReqParams.getParameterValue("WMSLAYERS");
        double lWmsRes = ((Double) lReqParams.getParameterValue("WMSRES")).doubleValue();
        double lSearchRadius = ((Double) lReqParams.getParameterValue("SEARCHRADIUS")).doubleValue();
        int lVisAdds = ((Integer) lReqParams.getParameterValue("VISADDS")).intValue();
        boolean lTransparent = ((Boolean) lReqParams.getParameterValue("TRANSPARENT")).booleanValue();
        String lBgColorHex = (String) lReqParams.getParameterValue("BGCOLOR");
        lCacheScene = ((Boolean) lReqParams.getParameterValue("CACHESCENE")).booleanValue();
        String lExceptions = (String) lReqParams.getParameterValue("EXCEPTIONS");
        int lQuality = ((Integer) lReqParams.getParameterValue("QUALITY")).intValue();
        double lLightInt = ((Double) lReqParams.getParameterValue("LIGHTINT")).doubleValue();
        String lMonProtUser = (String) lReqParams.getParameterValue("MONPROTUSER");
        String lMonProtPasswd = (String) lReqParams.getParameterValue("MONPROTPASSWD");

        if (lRequest.equalsIgnoreCase("GetCapabilities")) {
            HttpStandardResponse response = new HttpStandardResponse();
            response.sendXMLFile(mCapabilitiesFile, pResponse);
            this.logGetCapabilitiesInfo(lTmpName, pRequest);
            return;
        }

        if (lRequest.equalsIgnoreCase("GetMonProtocol")) {
            // hier evtl. besseren Zugriffsschutz realisieren...
            if (pRequest.getMethod().equalsIgnoreCase("POST")) {
                if ((mMonProtUser != null && mMonProtPasswd != null && lMonProtUser.compareTo(mMonProtUser) == 0
                        && lMonProtPasswd.compareTo(mMonProtPasswd) == 0)
                        || lMonProtUser.compareTo("wtsadmin") == 0 && lMonProtPasswd.compareTo("geheim") == 0) {
                    this.monitorProtocol(pResponse);
                }
            }
            return;
        }

        if (!lRequest.equalsIgnoreCase("GetView")) {
            lKeepTempFilesInCaseOfError = false;
            throw new T3dException("Illegal request type " + lRequest + "...");
        }

        // Request-Parameter aufbereiten und Wertebereiche prfen:
        ParameterPreparer pp = new ParameterPreparer();
        lSRS = pp.prepareSRS(lSRS);
        lBBox = pp.prepareBBOX(lBBox, lSRS);
        lPoi = pp.preparePOI(lPoi, lSRS);
        lYaw = pp.prepareYAW(lYaw);
        lPitch = pp.preparePITCH(lPitch);
        lDistance = pp.prepareDISTANCE(lDistance);
        lAov = pp.prepareAOV(lAov);
        lWmsLayers = pp.prepareWMSLAYERS(lWmsLayers);
        lWmsRes = pp.prepareWMSRES(lWmsRes);
        lTransparent = pp.prepareTRANSPARENT(lTransparent);
        T3dColor lBgColor = pp.prepareBGCOLOR(lBgColorHex);
        lWidth = pp.prepareWIDTH(lWidth);
        lHeight = pp.prepareHEIGHT(lHeight);
        lExceptions = pp.prepareEXCEPTIONS(lExceptions);
        lQuality = pp.prepareQUALITY(lQuality);
        lLightInt = pp.prepareLIGHTINT(lLightInt);

        sLogger.debug("WebTerrainServlet (" + lTmpName + "): Received GetView request.");

        if (lSearchRadius < mSearchRadiusMin) // todo
            lSearchRadius = mSearchRadiusMin;

        if (!lBBox.hasMetricSRS()) {
            if (lBBox.hasGeographicSRS()) {
                // metrisch bentigte Parameter umrechnen
                lExaggeration /= Wgs84Helper.degree2meter;
                lSearchRadius /= Wgs84Helper.degree2meter;
            } else
                throw new T3dException("Missing SRS support for \"" + lBBox.getSRS() + "\".");
        }

        // Temporrdateien-Verwaltung gewhrleisten und ggf. Session-Objekt holen:
        WTSSession lWtsSession = new WTSSession();
        lWtsSession = this.setUpSession(lWtsSession, lCacheScene, pRequest, lBBox, lDrape, lWmsLayers);
        HttpSession lSession = lWtsSession.getHttpSession();
        lRequTmpMngr = lWtsSession.getRequTempFileHandler();
        if (lCacheScene)
            lSessionTmpMngr = lWtsSession.getSessionTempFileHandler();
        lTimeProt.setFinished("init");

        // Hhenmodell berechnen (Gridding):
        lTimeProt.addTimeStamp("dem_access");
        VgElevationGrid lTerrain = this.setUpTerrain(lCacheScene, lSession, lBBox, lHeight, lWidth,
                lSearchRadius);
        lTimeProt.setFinished("dem_access");

        // Drape holen:
        lTimeProt.addTimeStamp("drape_access");
        String lDrapeFile = this.setUpDrape(lCacheScene, lWtsSession, lDrape, lWmsLayers, lBBox, lSRS, lWidth,
                lTerrain, lTmpName, lWmsRes);
        if (mLocalDebug)
            System.out.println("lDrapeFile = \"" + lDrapeFile + "\"");
        lTimeProt.setFinished("drape_access");

        // POV-Ray-Szene definieren:
        lTimeProt.addTimeStamp("scene_def");
        if (lDistance == 0. && lPoi == null)
            lDistance = this.determineDefaultDistance(lTerrain, lYaw * Math.PI / 180., lExaggeration,
                    2. * lAov);
        VsSimpleScene lScene = this.defineScene(lTerrain, lDrapeFile, lVisAdds, lDistance, lPoi,
                lYaw * Math.PI / 180., -lPitch * Math.PI / 180., lExaggeration, 2. * lAov);
        lScene.setBackgroundColor(lBgColor);
        lRequTmpMngr.addTempFile(mWorkingDirectory + "/" + lTmpName + ".pov");
        lRequTmpMngr.addTempFile(mWorkingDirectory + "/" + lTmpName + ".bat");
        lTimeProt.setFinished("scene_def");

        // POV-Ray-Umgebung setzen und Szene rendern: // todo: alles noch zu POV-Ray-spezifisch -> Interface bauen/erweitern?  / j3dwts-Servlet mit gemeinsamem Kern?
        lTimeProt.addTimeStamp("rendering");
        this.configureRenderer(lScene, lWidth, lHeight, lTmpName, lLightInt);
        String lGifEncodedDEM = null;
        if (lCacheScene) // Dateinamen fr GIF-kodiertes Hhenmodell aus Session holen
            lGifEncodedDEM = (String) lSession.getAttribute("demgif_" + lSession.getId());
        boolean lInstanceOverflow = false;
        try {
            if (mUseTimeSlices) {
                Long lTimeSlice = mTimeSliceAssigner.getAssignedSlice();
                if (lTimeSlice != null) {
                    long lTimeSliceStart = lTimeSlice.longValue();
                    long lCurrTime = mTimeSliceAssigner.currentTime();
                    if (lTimeSliceStart > lCurrTime) {
                        long lDelay = lTimeSliceStart - lCurrTime;
                        sLogger.debug("WebTerrainServlet (" + lTmpName + "): "
                                + "Rendering process will be delayed for " + lDelay + " msecs...");
                        Thread.sleep(lDelay);
                    } else {
                        // Bem.: Fr lTimeSliceStart <= lCurrTime keine Verzgerung
                        if (mLocalDebug)
                            System.out.println("Rendering process will not be be delayed...");
                    }
                } else {
                    // keine freie Zeitscheibe verfgbar
                    lKeepTempFilesInCaseOfError = false;
                    throw new T3dException("The server is too busy at the moment. Please try again later.",
                            100);
                }
            }

            if (mRendererInstances < mMaxRendererInstances) {
                mRendererInstances++;
                try {
                    ((PovrayScene) lScene).setLocalDebug(mLocalDebug);

                    if (lGifEncodedDEM == null) // CACHESCENE nicht gesetzt oder 1. Aufruf (GIF-Dateiname nicht in Session)
                        ((PovrayScene) lScene).render();
                    else
                        ((PovrayScene) lScene).renderCachedDEM(lGifEncodedDEM);
                } catch (Throwable e) {
                    mRendererInstances--;
                    lKeepTempFilesInCaseOfError = true;
                    throw e;
                }
                //System.out.println("mRendererInstances = " + mRendererInstances);
                mRendererInstances--;
            } else
                lInstanceOverflow = true;
        } catch (T3dException e) {
            lKeepTempFilesInCaseOfError = true;
            throw e;
        } catch (Exception e) {
            lKeepTempFilesInCaseOfError = true;
            throw new T3dException("For unknown reasons, the scene could not be rendered...", 400);
        }
        if (lInstanceOverflow) {
            lKeepTempFilesInCaseOfError = false;
            throw new T3dException("The server is too busy at the moment. Please try again later.", 101);
        }
        if (lCacheScene) {
            // GIF in Session legen
            lSession.setAttribute("demgif_" + lSession.getId(), ((PovrayScene) lScene).getGifEncodedDEM());
            lSessionTmpMngr.addTempFile(((PovrayScene) lScene).getGifEncodedDEM());
        } else
            lRequTmpMngr.addTempFile(((PovrayScene) lScene).getGifEncodedDEM());
        lRequTmpMngr.addTempFile(mWorkingDirectory + "/" + lTmpName + ".png");
        if (!mRendererImmediateTermination)
            lTimeProt.setFinished("rendering");

        // POV-Ray-Ergebnisbild holen:
        if (!mRendererImmediateTermination)
            lTimeProt.addTimeStamp("prepare_image");
        String resExt = MimeTypeHelper.getFileExtension(((PovrayScene) lScene).getImageFormat());
        String resFile = mWorkingDirectory + "/" + lTmpName + "." + resExt;
        sLogger.debug("WebTerrainServlet (" + lTmpName + "): Preparing image \"" + resFile + "\"...");
        File f = new File(resFile);
        ImageInputStream is = ImageIO.createImageInputStream(f);
        if (!mRendererImmediateTermination) {
            if (is == null) {
                lKeepTempFilesInCaseOfError = true;
                throw new T3dException("For unknown reasons, the renderer did not generate an image file.",
                        401);
            }
        } else {
            int lMaxIntervalChecks = 40;
            long lCheckInterval = mRendererTimeout / lMaxIntervalChecks;
            int ct = 0;
            while (is == null && ct < lMaxIntervalChecks) {
                ct++;
                try {
                    Thread.sleep(lCheckInterval);
                } catch (Exception e2) {
                }
                ;
                is = ImageIO.createImageInputStream(f);
            }
            if (is == null && ct >= lMaxIntervalChecks) {
                lKeepTempFilesInCaseOfError = true;
                throw new T3dException("An I/O exception occured. The renderer did not generate an image file.",
                        402);
            }
            lTimeProt.setFinished("rendering");
            lTimeProt.addTimeStamp("prepare_image");
        }
        BufferedImage lImage = this.prepareImage(is, lHeight, lWidth, lTerrain, lPitch, lYaw, lDistance,
                lExaggeration, (lVisAdds & 4) > 0, (lVisAdds & 8) > 0);
        lTimeProt.setFinished("prepare_image");

        // Ergebnisbild als Antwort senden:
        lTimeProt.addTimeStamp("send_response");
        try {
            this.sendResponse(lFormat, pResponse, lImage, resExt, lQuality);
        } catch (Throwable e) {
            is.close();
            lKeepTempFilesInCaseOfError = false;
            throw e;
        }
        is.close();
        lTimeProt.setFinished("send_response");

        String lOutputFormatInfo = lFormat + " (" + lWidth + "x" + lHeight + ")";
        this.logGetViewInfo(lTmpName, lTerrain, lTimeProt, pRequest, lOutputFormatInfo);
        //this.removeTempFiles(lRequTmpMngr, lSessionTmpMngr, lCacheScene);
        sLogger.debug("WebTerrainServlet (" + lTmpName + "): Duly finished execution.");
    } catch (Throwable e) {
        sLogger.debug("WebTerrainServlet (" + lTmpName + "): Aborting execution. Error: " + e.getMessage());

        if (!lKeepTempFilesInCaseOfError)
            this.removeTempFiles(lRequTmpMngr, lSessionTmpMngr, lCacheScene);

        HttpStandardResponse response = new HttpStandardResponse();
        try {
            String lExceptions = (String) this.fetchRequestParameters(pRequest).getParameterValue("EXCEPTIONS");
            if (lExceptions.equalsIgnoreCase("application/vnd.ogc.se_inimage")) {
                int lWidth = ((Integer) this.fetchRequestParameters(pRequest).getParameterValue("WIDTH"))
                        .intValue();
                int lHeight = ((Integer) this.fetchRequestParameters(pRequest).getParameterValue("HEIGHT"))
                        .intValue();
                String lFormat = (String) this.fetchRequestParameters(pRequest).getParameterValue("FORMAT");
                response.sendException(T3dExceptionMessage.getInstance().translate(e), pResponse, lFormat,
                        lWidth, lHeight);
            } else
                response.sendException(e.getMessage(), pResponse);
        } catch (Throwable e2) {
            try {
                response.sendException(e.getMessage(), pResponse);
            } catch (Throwable e3) {
                System.out.println("WebTerrainServlet: FATAL ERROR - " + e2.getMessage());
            }
        }
        try {
            this.logErrorInfo(lTmpName, lTimeProt, pRequest, e);
        } catch (Throwable e2) {
            System.out.println("WebTerrainServlet: FATAL ERROR - " + e2.getMessage());
        }
    }
}

From source file:com.evolveum.polygon.connector.drupal.DrupalConnector.java

private String createFile(byte[] fileContent, String fileName) throws IOException {
    // determine image type
    String extension = "jpg";
    try {/*from ww w  .  ja  v  a 2  s . c  o m*/
        ByteArrayInputStream is = new ByteArrayInputStream(fileContent);
        ImageInputStream iis = ImageIO.createImageInputStream(is);

        Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(iis);

        while (imageReaders.hasNext()) {
            ImageReader reader = (ImageReader) imageReaders.next();
            extension = reader.getFormatName();
        }
    } catch (IOException e) {
        throw new ConnectorIOException("not parseable image extension (JPEG/PNG/...): " + e.getMessage(), e);
    }

    JSONObject jo = new JSONObject();
    jo.put(ATTR_FILE_STATUS, ATTR_FILE_STATUS_DEFAULT);
    jo.put(ATTR_FILE_FILE, Base64.encode(fileContent));
    jo.put(ATTR_FILE_FILENAME, fileName + "." + extension);

    HttpPost request = new HttpPost(getConfiguration().getServiceAddress() + FILE);
    JSONObject file = callRequest(request, jo);

    return file.getString(FID);
}