zoukankan      html  css  js  c++  java
  • java 图像压缩

    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.RenderingHints;
    import java.awt.color.ColorSpace;
    import java.awt.geom.AffineTransform;
    import java.awt.image.AffineTransformOp;
    import java.awt.image.BufferedImage;
    import java.awt.image.ColorConvertOp;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.util.Base64;
    
    import javax.imageio.ImageIO;
    
    public class Program {
    
        public static void main(String[] args) throws Exception {
            int maxWidth = 800;
            int maxHeight = 600;
            BufferedImage image = ImageIO.read(new File("E:\Desktop\IMG20200322201448.jpg"));
            image = zoomImageFromWidthAndHeight(image,maxWidth,maxHeight);
            ImageIO.write(image, "jpg", new File("E:\Desktop\IMG20200322201448(" + maxWidth + "x" + maxHeight + ").jpg"));
            System.out.println("OK");
        }
        
        public static BufferedImage grayImage(final BufferedImage srcImg) {
            int iw = srcImg.getWidth();
            int ih = srcImg.getHeight();
            Graphics2D srcG = srcImg.createGraphics();
            RenderingHints rhs = srcG.getRenderingHints();
     
            ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
            ColorConvertOp theOp = new ColorConvertOp(cs, rhs);
            BufferedImage dstImg = new BufferedImage(iw, ih,
                    BufferedImage.TYPE_INT_RGB);
     
            theOp.filter(srcImg, dstImg);
            return dstImg;
        }
        
        public static BufferedImage zoomImageFromWidthAndHeight(BufferedImage bufImg, int maxWidth, int maxHeight) {
            int actualWidth = bufImg.getWidth();
            int actualHeight = bufImg.getHeight();
            
            if(((double)maxWidth*(double)actualHeight/(double)actualWidth)*(double)maxWidth 
                    < ((double)maxHeight*(double)actualWidth/(double)actualHeight)*(double)maxHeight)
            {
                actualHeight = (int)((double)maxWidth * (double)actualHeight / (double)actualWidth);
                actualWidth = maxWidth;
            }
            else
            {
                actualWidth = (int)((double)maxHeight * (double)actualWidth / (double)actualHeight);
                actualHeight = maxHeight;
            }
            
            double wr = 0,hr = 0;
            Image Itemp = bufImg.getScaledInstance(actualWidth, actualHeight, bufImg.SCALE_SMOOTH);//设置缩放目标图片模板
            
            wr = actualWidth*1.0 / bufImg.getWidth();
            hr = actualHeight*1.0 / bufImg.getHeight();
    
            AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(wr, hr), null);
            Itemp = ato.filter(bufImg, null);
            return (BufferedImage) Itemp;
        }
        
    }
  • 相关阅读:
    HDU2013 蟠桃记
    HDU2012 素数判定
    I00030 Grades conversion
    HDU2011 多项式求和
    HDU2009 求数列的和
    HDU2005 第几天?【日期计算】
    HDU2004 成绩转换
    HDU2006 求奇数的乘积
    HDU2007 平方和与立方和【序列处理】
    HDU2010 水仙花数【进制+趣味程序】
  • 原文地址:https://www.cnblogs.com/nanfei/p/12568081.html
Copyright © 2011-2022 走看看