package com.jzlife.nurse.util;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
*
* @author lu
*
*/
public class ImagePixelConvert {
private static final int IMG_WIDTH = 180;
private static final int IMG_HEIGHT = 230;
// public static void main(String[] args) throws IOException {
// BufferedImage buffImg = new BufferedImage(30*10, 20, BufferedImage.TYPE_INT_RGB);
// Graphics2D g = buffImg.createGraphics();
// g.setColor(new Color(198, 217, 241));
// g.fillRect(0, 0,buffImg.getWidth(), buffImg.getHeight());
// ImageIO.write(buffImg, "png", new File("D:\\3.png"));
// }
public static void main(String[] args) {
try {
BufferedImage originalImage = ImageIO.read(new File("D:\\1570515923048.jpg"));
int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB
: originalImage.getType();
BufferedImage resizeImageHintPng = resizeImageWithHint2(
originalImage, type);
ImageIO.write(resizeImageHintPng, "png", new File("D:\\5.jpg"));
// BufferedImage resizeImageJpg = resizeImage(originalImage, type);
// ImageIO.write(resizeImageJpg, "jpg", new File("D:\\2.jpg"));//图片会变红色
// BufferedImage resizeImagePng = resizeImage(originalImage, type);
// ImageIO.write(resizeImagePng, "png", new File("D:\\3.jpg"));
//
// BufferedImage resizeImageHintJpg = resizeImageWithHint(
// originalImage, type);
// ImageIO.write(resizeImageHintJpg, "jpg", new File("D:\\4.jpg"));//图片会变红色
//
// BufferedImage resizeImageHintPng = resizeImageWithHint(
// originalImage, type);
// ImageIO.write(resizeImageHintPng, "png", new File("D:\\5.jpg"));
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
/**
* 生成长条
* @param width
* @param height
* @return
*/
public static BufferedImage createBufferedImage(int width,int height) {
BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
g.setColor(new Color(198, 217, 241));
g.fillRect(0, 0,buffImg.getWidth(), buffImg.getHeight());
// ImageIO.write(buffImg, "png", new File("D:\\3.png"));
return buffImg;
}
@SuppressWarnings("unused")
public static BufferedImage resizeImage(BufferedImage originalImage,
int type) {
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT,
type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
return resizedImage;
}
@SuppressWarnings("unused")
public static BufferedImage resizeImageWithHint(
BufferedImage originalImage, int type) {
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT,
type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
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);
return resizedImage;
}
/**
* 等比截取需要的图片
* @param originalImage
* @param type
* @return
*/
@SuppressWarnings("unused")
public static BufferedImage resizeImageWithHint2(
BufferedImage originalImage, int type) {
int width = originalImage.getWidth();
int height = originalImage.getHeight();
float dengbizhi=(float)IMG_WIDTH/(float)IMG_HEIGHT;//等比值
float bn=(float) ((width/height)-dengbizhi);
if(bn!=0) {//bn>0.2||bn<-0.2
System.out.println("不等比");
//不等比,要截取到等比,
//拿宽度/等比值=需要的高度,再用总高度减去需要的高度,得到高度开始值
int needH=(int) (width/dengbizhi);
int startH=height-needH;
originalImage = originalImage.getSubimage(0,startH/2,width,needH);//startH/2是上下等比截取
}
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT,type);
Graphics2D g = resizedImage.createGraphics();//创建新的高度
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
return resizedImage;
}
}