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;
        }
        
    }
  • 相关阅读:
    Delphi2010 DataSnap 学习(一)
    DLL封装ReportMachine/FastReport报表
    Delphi中的字符串压缩与解压缩
    Delphi 2010 DataSnap封装COM对象
    PHP&MySQL的一个乱码
    Indy接收邮件中文无编码乱码问题
    Asp.net Mvc自定义客户端验证(CheckBox列表的验证)
    浅谈在asp.net mvc3中使用IValidatableObject接口实现Model数据验证
    使用ModelBinder绑定IPrincipal (User)简化ASP.NET MVC单元测试
    asp.net mvc使用TagBuilder的应用程序集
  • 原文地址:https://www.cnblogs.com/nanfei/p/12568081.html
Copyright © 2011-2022 走看看