Revision: 5585 http://sourceforge.net/p/jump-pilot/code/5585 Author: ma15569 Date: 2017-11-26 18:58:33 +0000 (Sun, 26 Nov 2017) Log Message: ----------- Affine trasformation of Image 2) add Utils class
Added Paths: ----------- core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/imagery/ImageryUtils.java Added: core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/imagery/ImageryUtils.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/imagery/ImageryUtils.java (rev 0) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/imagery/ImageryUtils.java 2017-11-26 18:58:33 UTC (rev 5585) @@ -0,0 +1,328 @@ +package com.vividsolutions.jump.workbench.ui.plugin.imagery; + +import it.geosolutions.imageio.plugins.tiff.TIFFImageWriteParam; + +import java.awt.AlphaComposite; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.awt.image.renderable.ParameterBlock; +import java.io.File; +import java.io.IOException; +import java.util.Iterator; +import java.util.Locale; + +import javax.imageio.IIOImage; +import javax.imageio.ImageIO; +import javax.imageio.ImageWriteParam; +import javax.imageio.ImageWriter; +import javax.imageio.stream.ImageOutputStream; +import javax.media.jai.JAI; +import javax.media.jai.RenderedOp; + +import org.openjump.core.rasterimage.GridAscii; +import org.openjump.core.rasterimage.GridFloat; + +import com.sun.media.jai.codec.FileSeekableStream; +import com.sun.media.jai.codec.TIFFDecodeParam; +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jump.feature.Feature; +import com.vividsolutions.jump.feature.FeatureCollection; +import com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset; +import com.vividsolutions.jump.workbench.imagery.ReferencedImageException; +import com.vividsolutions.jump.workbench.imagery.geoimg.GeoReferencedRaster; +import com.vividsolutions.jump.workbench.model.Layer; + +public class ImageryUtils { + + static String fileNameOrURL = ""; + static String sourcePathImage = null; + + /** + * Save to Tiff + * + * @param tiffFile + * : ex. C:/Folder/file.tif + * @param bufferedImage + * : BufferedImage from a layer + * @return + */ + public static boolean saveToTiff(File tiffFile, BufferedImage bufferedImage) { + ImageOutputStream ios = null; + ImageWriter writer = null; + try { + // find an appropriate writer + Iterator it = ImageIO.getImageWritersByFormatName("TIF"); + if (it.hasNext()) { + writer = (ImageWriter) it.next(); + } else { + return false; + } + // setup writer + ios = ImageIO.createImageOutputStream(tiffFile); + writer.setOutput(ios); + TIFFImageWriteParam writeParam = new TIFFImageWriteParam( + Locale.ENGLISH); + writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); + writeParam.setCompressionType("LZW"); + // convert to an IIOImage + IIOImage iioImage = new IIOImage(bufferedImage, null, null); + + writer.write(null, iioImage, writeParam); + + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + + } + + /** + * Save to PNG + * + * @param pngFile + * : ex. C:/Folder/file.png + * @param bufferedImage + * : BufferedImage from a layer + * @return + */ + + public static boolean saveToPng(File pngFile, BufferedImage image) { + try { + ImageIO.write(image, "png", pngFile); + + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + + } + + /** + * Check if ImageLayer has been modified + * + * @throws ReferencedImageException + */ + + public static boolean hasBeenModified(Layer layer) { + FeatureCollection featureCollection = layer + .getFeatureCollectionWrapper(); + for (Iterator i = featureCollection.iterator(); i.hasNext();) { + Feature feature = (Feature) i.next(); + sourcePathImage = feature.getString(ImageryLayerDataset.ATTR_URI); + if (sourcePathImage == null || sourcePathImage.length() < 5) { + sourcePathImage = ""; + } else { + sourcePathImage = sourcePathImage.substring(5); + } + + } + fileNameOrURL = sourcePathImage.replace("%20", " "); + + GeoReferencedRaster geoRaster = null; + try { + geoRaster = new GeoReferencedRaster(fileNameOrURL); + } catch (ReferencedImageException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + Envelope originalEnv = geoRaster.getOriginalEnvelope(); + + Envelope targetEnv = geoRaster.getEnvelope(); + // targetEnv.expandToInclude(layer.getFeatureCollectionWrapper() + // .getEnvelope()); + + if (targetEnv.equals(originalEnv)) { + return false; + } else { + return true; + } + } + + /** + * Check if the selected layer is BMP, JPG, GIF, PNG or TIF + * + * @param layer + * @return + */ + + public static boolean isCompatibleImageLayer(Layer layer) { + FeatureCollection featureCollection = layer + .getFeatureCollectionWrapper(); + for (Iterator i = featureCollection.iterator(); i.hasNext();) { + Feature feature = (Feature) i.next(); + sourcePathImage = feature.getString(ImageryLayerDataset.ATTR_URI); + if (sourcePathImage == null || sourcePathImage.length() < 5) { + sourcePathImage = ""; + } else { + sourcePathImage = sourcePathImage.substring(5); + } + + } + fileNameOrURL = sourcePathImage.replace("%20", " "); + + if (fileNameOrURL.toLowerCase().endsWith(".jpg") + || fileNameOrURL.toLowerCase().endsWith(".jpeg") + || fileNameOrURL.toLowerCase().endsWith(".gif") + || fileNameOrURL.toLowerCase().endsWith(".png") + || fileNameOrURL.toLowerCase().endsWith(".bmp") + || fileNameOrURL.toLowerCase().endsWith(".jp2") + || fileNameOrURL.toLowerCase().endsWith(".tif") + || fileNameOrURL.toLowerCase().endsWith(".tiff")) { + return true; + } else { + return false; + } + } + + /** + * Get a bufferedImage from a ReferencedImage layer + * + * @param layer + * @return + * @throws IOException + */ + + public static BufferedImage getBufferFromReferenceImageLayer(Layer layer) + throws IOException { + + FeatureCollection featureCollection = layer + .getFeatureCollectionWrapper(); + for (Iterator i = featureCollection.iterator(); i.hasNext();) { + Feature feature = (Feature) i.next(); + sourcePathImage = feature.getString(ImageryLayerDataset.ATTR_URI); + if (sourcePathImage == null || sourcePathImage.length() < 5) { + sourcePathImage = ""; + } else { + sourcePathImage = sourcePathImage.substring(5); + } + + } + fileNameOrURL = sourcePathImage.replace("%20", " "); + BufferedImage bImage = null; + if (fileNameOrURL.toLowerCase().endsWith(".jpg") + || fileNameOrURL.toLowerCase().endsWith(".gif") + || fileNameOrURL.toLowerCase().endsWith(".png") + || fileNameOrURL.toLowerCase().endsWith(".bmp") + || fileNameOrURL.toLowerCase().endsWith(".jp2")) { + + try { + // Try with ImageIO + bImage = ImageIO.read(new File(fileNameOrURL)); + } catch (Exception ex) { + // Try with JAI + bImage = JAI.create("fileload", fileNameOrURL) + .getAsBufferedImage(); + } + } + if (fileNameOrURL.toLowerCase().endsWith(".tif") + || fileNameOrURL.toLowerCase().endsWith(".tiff")) { + try { + bImage = ImageIO.read(new File(fileNameOrURL)); + + } catch (Exception ex) { + + FileSeekableStream stream = new FileSeekableStream( + fileNameOrURL); + TIFFDecodeParam decodeParam = new TIFFDecodeParam(); + decodeParam.setDecodePaletteAsShorts(true); + ParameterBlock params = new ParameterBlock(); + params.add(stream); + RenderedOp image1 = JAI.create("tiff", params); + bImage = image1.getAsBufferedImage(); + } + } else if (fileNameOrURL.toLowerCase().endsWith(".flt")) { + try { + GridFloat gf = new GridFloat(fileNameOrURL); + gf.readGrid(null); + bImage = gf.getBufferedImage(); + } catch (Exception ex) { + // Try with ImageIO + bImage = ImageIO.read(new File(fileNameOrURL)); + } + } else if (fileNameOrURL.toLowerCase().endsWith(".asc") + || fileNameOrURL.toLowerCase().endsWith(".txt")) { + try { + GridAscii ga = new GridAscii(fileNameOrURL); + ga.readGrid(null); + bImage = ga.getBufferedImage(); + } catch (Exception ex) { + // Try with ImageIO + bImage = ImageIO.read(new File(fileNameOrURL)); + } + + } else if (fileNameOrURL.toLowerCase().endsWith(".ecw")) { + + try { + // ECWImage ecw = new ECWImage(fileNameOrURL); + bImage = ImageIO.read(new File(fileNameOrURL)); + } catch (Exception ex) { + // Try with ImageIO + bImage = ImageIO.read(new File(fileNameOrURL)); + } + + } + return bImage; + } + + /** + * Add an alpha channel to a BufferedImage + * + * @param image + * @return + */ + + public static BufferedImage addAlphaChannel(BufferedImage image) { + BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), + image.getHeight(null), BufferedImage.TYPE_INT_ARGB); + + Graphics2D g2 = bufferedImage.createGraphics(); + g2.drawImage(image, 0, 0, null); + g2.dispose(); + return bufferedImage; + } + + /** + * + * @param originalImage + * @param width + * @param height + * @return + */ + public static BufferedImage resizeImage(BufferedImage bufferedImage, + int width, int height) { + BufferedImage resizedImage = new BufferedImage(width, height, + BufferedImage.TYPE_INT_ARGB); + Graphics2D g = resizedImage.createGraphics(); + // g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null); + g.drawImage(bufferedImage.getScaledInstance(width, height, + Image.SCALE_SMOOTH), 0, 0, null); + g.dispose(); + + return resizedImage; + } + + public static BufferedImage resizeImage_test(BufferedImage bufferedImage, + int width, int height) { + + BufferedImage resizedImage = new BufferedImage(width, height, + BufferedImage.TYPE_INT_ARGB); + Graphics2D g = resizedImage.createGraphics(); + g.drawImage(bufferedImage, 0, 0, width, height, null); + g.setComposite(AlphaComposite.Src); + + g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR); + g.setRenderingHint(RenderingHints.KEY_RENDERING, + RenderingHints.VALUE_RENDER_QUALITY); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g.dispose(); + return resizedImage; + } + +} Property changes on: core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/imagery/ImageryUtils.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel