package cc.mrbird.febs.mall.test; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class PixelateImage { public static void main(String[] args) { handleDpi(new File("D:\\image\\inputDpi.png"),50,50); getPixel("D:\\image\\input.png"); try { resizeImage("D:\\image\\input.png","D:\\image\\output.png",360);//将图片压缩至100宽 } catch (IOException e) { e.printStackTrace(); } } /** * 功能:获取图片像素 * * @param filePath 图片路径 */ public static void getPixel(String filePath){ File file = new File(filePath); BufferedImage bi = null; try { bi = ImageIO.read(file); } catch (Exception e) { e.printStackTrace(); } int width = bi.getWidth(); // 像素 int height = bi.getHeight(); // 像素 System.out.println("width=" + width + ",height=" + height + "."); } /** * @param inputPath 源图片路径 * @param outputPath 修改大小后图片路径 * @param scaleSize 图片的修改比例,目标宽度 */ public static void resizeImage(String inputPath, String outputPath,int scaleSize) throws IOException { File srcFile = new File(inputPath); Image srcImg = ImageIO.read(srcFile); BufferedImage bi = null; try { bi = ImageIO.read(srcFile); } catch (Exception e) { e.printStackTrace(); } float width = bi.getWidth(); // 像素 float height = bi.getHeight(); // 像素 float scale = width/scaleSize; BufferedImage buffImg = null; buffImg = new BufferedImage(scaleSize, (int)(height/scale), BufferedImage.TYPE_INT_RGB); //使用TYPE_INT_RGB修改的图片会变色 buffImg.getGraphics().drawImage( srcImg.getScaledInstance(scaleSize, (int)(height/scale), Image.SCALE_SMOOTH), 0, 0, null); ImageIO.write(buffImg, "JPEG", new File(outputPath)); } /** * 改变图片DPI * * @param file * @param xDensity * @param yDensity */ public static void handleDpi(File file, int xDensity, int yDensity) { try { BufferedImage image = ImageIO.read(file); JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(file)); JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image); jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH); jpegEncoder.setJPEGEncodeParam(jpegEncodeParam); jpegEncodeParam.setQuality(0.1f, false); jpegEncodeParam.setXDensity(xDensity); jpegEncodeParam.setYDensity(yDensity); jpegEncoder.encode(image, jpegEncodeParam); image.flush(); } catch (IOException e) { e.printStackTrace(); } } }