⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageformatconverter.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 JAVA
字号:
/**
 * 
 */
package com.esri.solutions.jitk.web.wcs.data;

import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.awt.image.renderable.ParameterBlock;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.media.jai.ColorCube;
import javax.media.jai.JAI;
import javax.media.jai.KernelJAI;
import javax.media.jai.PlanarImage;

import com.esri.adf.web.util.ImageUtil;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.JPEGDecodeParam;
import com.sun.media.jai.codec.PNGDecodeParam;
import com.sun.media.jai.codec.PNGEncodeParam;
import com.sun.media.jai.codec.SeekableStream;

/**
 * @author vlad2928
 *
 */
public class ImageFormatConverter {
	
	private static byte[] getRGBBytes(PlanarImage src, String imgType) throws IOException {
		
		if(imgType.equalsIgnoreCase("PNG8")) {
			// convert 24 bit to 8 bit (3 band to 1 band)
		    ParameterBlock pb = new ParameterBlock();
		    ColorCube colorMap = ColorCube.BYTE_496;
		    KernelJAI[] ditherMask = KernelJAI.DITHER_MASK_443;
		    pb.addSource(src).add(colorMap).add(ditherMask);
		    src = JAI.create("ordereddither", pb);
		}
		
		ByteArrayOutputStream bStream = new ByteArrayOutputStream();

		// Set transparency for the background.
		// Currently only support ArcGIS server WCS service.
		
		if(imgType.indexOf("PNG") >= 0) {	
			PNGEncodeParam.RGB rgb = new PNGEncodeParam.RGB();
			PNGEncodeParam.getDefaultEncodeParam(src.getAsBufferedImage());
				
			int[] b = new int[]{0,0,0,0};
			rgb.setTransparentRGB(b);
			ImageEncoder encoder = ImageCodec.createImageEncoder(imgType, bStream, rgb);
			encoder.encode(src.getAsBufferedImage());
		
		} else {
			JAI.create("encode", src, bStream, imgType);
		}
		
		return bStream.toByteArray();
	}
	
	public static InputStream toRGBStream(InputStream imgStream, String imgType) throws IOException {
		
		SeekableStream is = SeekableStream.wrapInputStream(imgStream, true);
		imgType = getTrueImageType(imgType);
		
		PlanarImage planarImage = null;
		
		if(imgType.equalsIgnoreCase("PNG")) {
			PNGDecodeParam param = new PNGDecodeParam();
		    param.setExpandPalette(true);
		    
		    ImageDecoder decoder = ImageCodec.createImageDecoder(imgType, is, param);
		    planarImage = PlanarImage.wrapRenderedImage(decoder.decodeAsRenderedImage());
		
		} else if(imgType.equalsIgnoreCase("JPEG")) {
			JPEGDecodeParam param = new com.sun.media.jai.codec.JPEGDecodeParam();
			ImageDecoder decoder = ImageCodec.createImageDecoder(imgType, is, param);
			planarImage = PlanarImage.wrapRenderedImage(decoder.decodeAsRenderedImage());
		
		} else {
			planarImage = JAI.create("stream", is);
		}

		BufferedImage bufImg = new BufferedImage(planarImage.getWidth(), planarImage.getHeight(), BufferedImage.TYPE_INT_RGB);
		Graphics2D g2 = bufImg.createGraphics();
		g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
		g2.drawImage(planarImage.getAsBufferedImage(), 0, 0, null);
		g2.dispose();
		
		return new ByteArrayInputStream(getRGBBytes(PlanarImage.wrapRenderedImage(bufImg), imgType));
	  }

	public static InputStream toRGBStream(InputStream imgStream, double transparency, String imgType) throws IOException {
		
		InputStream rgbStream = toRGBStream(imgStream, imgType);
		
		if(transparency < 1.0) {
			return new ByteArrayInputStream(ImageUtil.applyTransparency(rgbStream, transparency, getTrueImageType(imgType)));
		}
		
		return rgbStream;
	}
	
	private static String getTrueImageType(String type) {
		
		String ret = "JPEG";
		
		if(type != null) {
			
			type = type.toUpperCase().replaceAll("IMAGE/", "").trim();
			
			if(type.equals("TIFF") || type.equals("TIF")) {
				ret = "TIFF";
			
			} else if(type.equals("PNG") || type.equals("PNG8") || type.equals("PNG24")) {
				ret = "PNG";
			}
		}
		
		return ret;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -