java图片处理工具

图片处理工具

import java.io.*;
import java.util.Date;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.*;

/**
 * 图片压缩处理
 * 
 * @author kuang hj
 */
public class ImgCompressUtils
{
    // 图片对象
    private Image img;
    
    // 原图的宽度
    private int width;
    
    // 原图的高度
    private int height;
    
    private static BufferedImage image;
    
    @SuppressWarnings("deprecation")
    public static void main(String[] args)
        throws Exception
    {
        System.out.println("开始:" + new Date().toLocaleString());
        ImgCompressUtils imgCom = new ImgCompressUtils("D:\\jjj.jpg");
        // 处理图片得到 image
        imgCom.resizeFix(80, 80);
        // 输出结果文件
        outputNewFile("D:\\result.jpg", image);
        System.out.println("结束:" + new Date().toLocaleString());
    }
    
    /**
     * 构造函数 取到需要处理的图片,得到宽 和 高
     */
    public ImgCompressUtils(String fileName)
        throws IOException
    {
        File file = new File(fileName);// 读入文件
        img = ImageIO.read(file); // 构造Image对象
        width = img.getWidth(null); // 得到源图宽
        height = img.getHeight(null); // 得到源图长
    }
    
    /**
     * 按照宽度还是高度进行压缩
     * 
     * @param destwidth int 最大宽度
     * @param destheight int 最大高度
     */
    public void resizeFix(int destwidth, int destheight)
        throws IOException
    {
        if (width / height > destwidth / destheight)
        {
            resizeByWidth(destwidth);
        }
        else
        {
            resizeByHeight(destheight);
        }
    }
    
    /**
     * 以宽度为基准,等比例放缩图片
     * 
     * @param destwidth int 新宽度
     */
    public void resizeByWidth(int destwidth)
        throws IOException
    {
        int tmph = (int)(height * destwidth / width);
        resize(destwidth, tmph);
    }
    
    /**
     * 以高度为基准,等比例缩放图片
     * 
     * @param destheight int 新高度
     */
    public void resizeByHeight(int destheight)
        throws IOException
    {
        int tmpw = (int)(width * destheight / height);
        resize(tmpw, destheight);
    }
    
    /**
     * 强制压缩/放大图片到固定的大小
     * 
     * @param w int 新宽度
     * @param h int 新高度
     */
    public BufferedImage resize(int destwidth, int destheight)
    {
        // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢
        image = new BufferedImage(destwidth, destheight, BufferedImage.TYPE_INT_RGB);
        
        // 绘制缩小后的图
        image.getGraphics().drawImage(img, 0, 0, destwidth, destheight, null);
        
        return image;
    }
    
    /**
     * 新生成的压缩文件 <一句话功能简述> <功能详细描述>
     * 
     * @param path
     * @param image
     * @see [类、类#方法、类#成员]
     */
    public static void outputNewFile(String path, BufferedImage image)
    {
        try
        {
            File destFile = new File(path);
            FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流
            // 可以正常实现bmp、png、gif转jpg
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(image); // JPEG编码
            out.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

如果是maven工程,编译时会报错,
JPEGImageEncoder  <pre name="code" class="java">JPEGCodec
找不到,其实就是jdk的包。需要在pom文件中 指定编译
 


<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jdk.version>1.8</jdk.version>
</properties>

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <compilerArguments>
                        <bootclasspath>${JAVA_HOME}\jre\lib\rt.jar;${JAVA_HOME}\jre\lib\jce.jar</bootclasspath>
                    </compilerArguments>
                </configuration>
            </plugin>
        </plugins>
    </build>

这样就ok了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值