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

📄 imagegenerator.java

📁 一个免费wap站
💻 JAVA
字号:
package com.blue.imageio;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.sun.jimi.core.Jimi;
import com.sun.jimi.core.JimiException;
import com.sun.jimi.core.util.ColorReducer;

public class ImageGenerator {

	public static final String MIME_PNG = "image/png";
	public static final String MIME_GIF = "image/gif";
	public static final String MIME_JPG = "image/jpeg";

	/**
	 * 
	 * @param sourceFile
	 * @param destFile
	 * @param newSize
	 * @param destMime
	 * @throws ImageException
	 */
	public static void generateImage(String sourceFile, String destFile, Size newSize, String destMime) throws ImageException {
		try {
			// read images. Here we read from files but it can be any source
			// (internet, database etc.)
			Image input = ImageIO.read(new FileInputStream(sourceFile));

			Image output = ImageGenerator.generateImage(input, newSize, destMime);

        	// output the image datas into byteArray stream
        	ByteArrayOutputStream baos = new ByteArrayOutputStream();
        	Jimi.putImage(MIME_PNG, output, baos);

        	byte[] data = baos.toByteArray();
        	
        	// reload byteArray stream datas
        	ByteArrayInputStream bios = new ByteArrayInputStream(data);
        	BufferedImage imageOut = ImageIO.read(bios);

        	// write into specfied format.
        	String formatName = "";
        	if (destMime.equalsIgnoreCase(MIME_PNG))
        		formatName = "png";
        	else if (destMime.equalsIgnoreCase(MIME_GIF))
        		formatName = "gif";
        	else
        		formatName = "jpg";

        	ImageIO.write(imageOut, formatName, new File(destFile));

		} catch (ImageException e) {
			throw e;
		} catch (JimiException e) {
			throw new ImageException(e.getMessage());
		} catch (IOException e) {
			throw new ImageException(e.getMessage());
		}
	}

	/**
	 * 
	 * @param imgOrigin
	 * @param newSize
	 * @param destMime
	 * @return
	 * @throws ImageException
	 */
	public static Image generateImage(Image imgOrigin, Size newSize, String destMime) throws ImageException {
		// Adjust target image size for output.
		Size sizeSrc = new Size(imgOrigin.getWidth(null), imgOrigin.getHeight(null));
		Size sizeCuted = new Size();

		float srcRatio = (float) sizeSrc.getWidth() / (float) sizeSrc.getHeight();
		float tgtRatio = (float) newSize.getWidth() / (float) newSize.getHeight();

		if (srcRatio < tgtRatio) {
			sizeCuted.setWidth(sizeSrc.getWidth());
			sizeCuted.setHeight((int)((float)sizeSrc.getWidth() / tgtRatio));
		} else {
			sizeCuted.setWidth((int)((float)sizeSrc.getHeight() * tgtRatio));
			sizeCuted.setHeight(sizeSrc.getHeight());
		}

		int cx = (sizeCuted.getWidth() - sizeSrc.getWidth()) / 2;
		int cy = (sizeCuted.getHeight() - sizeSrc.getHeight()) / 5 * 2;

		Image output = null;
		try {
			// Generate image that cut the border(s) if need.
			Image cutedImage = new BufferedImage(sizeCuted.getWidth(), sizeCuted.getHeight(), BufferedImage.TYPE_INT_RGB);
			cutedImage.getGraphics().drawImage(imgOrigin, cx, cy, null);

			// Resizging.
			output = new BufferedImage(newSize.getWidth(), newSize.getHeight(), BufferedImage.TYPE_INT_RGB);
			Graphics2D bufferedImageContext = ((BufferedImage)output).createGraphics();
			RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
			AffineTransform affineTransform = AffineTransform.getScaleInstance((float) newSize.getWidth() / (float) sizeCuted.getWidth(), (float) newSize.getHeight() / (float) sizeCuted.getHeight());
			bufferedImageContext.setRenderingHints(hints);
			bufferedImageContext.drawImage(cutedImage, affineTransform, null);

			// Octree arithmetic, transfer the image to 256 index color.
			if (destMime.equals(MIME_PNG) || destMime.equals(MIME_GIF)) {
				ColorReducer reducer = new ColorReducer(256, true);
				output = reducer.getColorReducedImage(output);
			}
		} catch (JimiException e) {
			throw new ImageException(e.getMessage());
		}

		return output;
	}
}

⌨️ 快捷键说明

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