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

📄 imageutils.java

📁 用Hibernate开发的JiveJdon
💻 JAVA
字号:
package com.jdon.jivejdon.util;import java.awt.Dimension;import java.awt.Image;import java.awt.image.BufferedImage;import java.awt.image.PixelGrabber;import java.io.BufferedInputStream;import java.io.File;import java.io.FileOutputStream;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.plugins.jpeg.JPEGImageWriteParam;import javax.imageio.stream.ImageOutputStream;import org.apache.struts.upload.FormFile;public class ImageUtils {		public static final int IMAGE_UNKNOWN = -1;	public static final int IMAGE_JPEG = 0;	public static final int IMAGE_PNG = 1;	public static final int IMAGE_GIF = 2;		public static void saveUploadedFile(FormFile theFile,String filename)	{		BufferedInputStream inputStream = null;		FileOutputStream outputStream = null;		try {			inputStream = new BufferedInputStream(theFile.getInputStream());			outputStream = new FileOutputStream(filename);						int c;			byte[] b = new byte[4096];			while ((c = inputStream.read(b)) != -1) {				outputStream.write(b, 0, c);			}		}		catch (IOException e) {			e.printStackTrace();		}		finally {			if (outputStream != null) {				try {					outputStream.flush();					outputStream.close();				}				catch (IOException e) { }			}			if (inputStream != null) {				try {					inputStream.close();				}				catch (IOException e) { }			}		}	}		public static BufferedImage resizeImage(String imgName, int type, int maxWidth, int maxHeight)throws IOException {		return resizeImage(ImageIO.read(new File(imgName)), type, maxWidth, maxHeight);	}	public static BufferedImage resizeImage(BufferedImage image, int type, int maxWidth, int maxHeight) {		Dimension largestDimension = new Dimension(maxWidth, maxHeight);		// Original size		int imageWidth = image.getWidth(null);		int imageHeight = image.getHeight(null);		float aspectRatio = (float) imageWidth / imageHeight;		if (imageWidth > maxWidth || imageHeight > maxHeight) {			if ((float) largestDimension.width / largestDimension.height > aspectRatio) {				largestDimension.width = (int) Math.ceil(largestDimension.height * aspectRatio);			}			else {				largestDimension.height = (int) Math.ceil(largestDimension.width / aspectRatio);			}			imageWidth = largestDimension.width;			imageHeight = largestDimension.height;		}		return createHeadlessSmoothBufferedImage(image, type, imageWidth, imageHeight);	}	public static boolean saveImage(BufferedImage image, String toFileName, int type)throws IOException {			return ImageIO.write(image, type == IMAGE_JPEG ? "jpg" : "png", new File(toFileName));	}	public static void saveCompressedImage(BufferedImage image, String toFileName, int type)	{		try {			if (type == IMAGE_PNG) {				throw new UnsupportedOperationException("PNG compression not implemented");			}			Iterator iter = ImageIO.getImageWritersByFormatName("jpg");			ImageWriter writer;			writer = (ImageWriter) iter.next();			ImageOutputStream ios = ImageIO.createImageOutputStream(new File(toFileName));			writer.setOutput(ios);			ImageWriteParam iwparam = new JPEGImageWriteParam(Locale.getDefault());			iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);			iwparam.setCompressionQuality(0.7F);			writer.write(null, new IIOImage(image, null, null), iwparam);			ios.flush();			writer.dispose();			ios.close();		}		catch (IOException e) {			e.printStackTrace();		}	}	public static BufferedImage createHeadlessBufferedImage(BufferedImage image, int type, int width, int height)	{		if (type == ImageUtils.IMAGE_PNG && hasAlpha(image)) {			type = BufferedImage.TYPE_INT_ARGB;		}		else {			type = BufferedImage.TYPE_INT_RGB;		}		BufferedImage bi = new BufferedImage(width, height, type);		for (int y = 0; y < height; y++) {			for (int x = 0; x < width; x++) {				bi.setRGB(x, y, image.getRGB(x * image.getWidth() / width, y * image.getHeight() / height));			}		}		return bi;	}	public static BufferedImage createHeadlessSmoothBufferedImage(BufferedImage source, int type, int width, int height)	{		if (type == ImageUtils.IMAGE_PNG && hasAlpha(source)) {			type = BufferedImage.TYPE_INT_ARGB;		}		else {			type = BufferedImage.TYPE_INT_RGB;		}		BufferedImage dest = new BufferedImage(width, height, type);		int sourcex;		int sourcey;		double scalex = (double) width / source.getWidth();		double scaley = (double) height / source.getHeight();		int x1;		int y1;		double xdiff;		double ydiff;		int rgb;		int rgb1;		int rgb2;		for (int y = 0; y < height; y++) {			sourcey = y * source.getHeight() / dest.getHeight();			ydiff = scale(y, scaley) - sourcey;			for (int x = 0; x < width; x++) {				sourcex = x * source.getWidth() / dest.getWidth();				xdiff = scale(x, scalex) - sourcex;				x1 = Math.min(source.getWidth() - 1, sourcex + 1);				y1 = Math.min(source.getHeight() - 1, sourcey + 1);				rgb1 = getRGBInterpolation(source.getRGB(sourcex, sourcey), source.getRGB(x1, sourcey), xdiff);				rgb2 = getRGBInterpolation(source.getRGB(sourcex, y1), source.getRGB(x1, y1), xdiff);				rgb = getRGBInterpolation(rgb1, rgb2, ydiff);				dest.setRGB(x, y, rgb);			}		}		return dest;	}	private static double scale(int point, double scale)	{		return point / scale;	}	private static int getRGBInterpolation(int value1, int value2, double distance)	{		int alpha1 = (value1 & 0xFF000000) >>> 24;		int red1 = (value1 & 0x00FF0000) >> 16;		int green1 = (value1 & 0x0000FF00) >> 8;		int blue1 = (value1 & 0x000000FF);		int alpha2 = (value2 & 0xFF000000) >>> 24;		int red2 = (value2 & 0x00FF0000) >> 16;		int green2 = (value2 & 0x0000FF00) >> 8;		int blue2 = (value2 & 0x000000FF);		int rgb = ((int) (alpha1 * (1.0 - distance) + alpha2 * distance) << 24)			| ((int) (red1 * (1.0 - distance) + red2 * distance) << 16)			| ((int) (green1 * (1.0 - distance) + green2 * distance) << 8)			| (int) (blue1 * (1.0 - distance) + blue2 * distance);		return rgb;	}	/**	 * Determines if the image has transparent pixels.	 * 	 * @param image The image to check for transparent pixel.s	 * @return <code>true</code> of <code>false</code>, according to the result	 */	public static boolean hasAlpha(Image image)	{		try {			PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);			pg.grabPixels();			return pg.getColorModel().hasAlpha();		}		catch (InterruptedException e) {			return false;		}	}	}

⌨️ 快捷键说明

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