maven报com.sun.image.codec.jpeg不存在

最近使用一些util工具(图片压缩)时遇到一个问题,上网搜索一下发现很多解决方法,但尝试一些后发现只有以下方法才最好,同时把自己的代码也分享出来

一些老的Java代码在JDK1.7下编译会报错,比如这个:程序包com.sun.image.codec.jpeg不存在。
     JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

JPEGImageEncoder类是SUN公司私有类

    一般出现在这样的代码段中:
        FileOutputStream out = new FileOutputStream(dstName);
         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
         encoder.encode(dstImage);

    改写成:

        String formatName = dstName.substring(dstName.lastIndexOf(".") + 1);
         //FileOutputStream out = new FileOutputStream(dstName);
         //JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
         //encoder.encode(dstImage);
         ImageIO.write(dstImage, /*"GIF"*/ formatName /* format desired */ , new File(dstName) /* target */ );
都使用统一的ImageIO进行图像格式文件的读写,没有必要使用过时的实现类JPEGImageEncoder类。

以下为自己遇到com.sun.image.codec.jpeg不存在所使用的java类(已改正,复制即可使用)

图片压缩:

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class PicCompress {
    // TODO Auto-generated constructor stub
    public static void resizePNG(File file, String toFile, int outputWidth, int outputHeight, boolean proportion) {
        try {
            // File f2 = new File(fromFile);

            // JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new
            // FileInputStream(file));
            // BufferedImage bi2 = decoder.decodeAsBufferedImage();

            BufferedImage bi2 = ImageIO.read(file); // 以上两行解决此处"Unsupported Image Type"
            int newWidth;
            int newHeight;
            // 判断是否是等比缩放
            if (proportion == true) {
                // 为等比缩放计算输出的图片宽度及高度
                double rate1 = ((double) bi2.getWidth(null)) / (double) outputWidth;
                double rate2 = ((double) bi2.getHeight(null)) / (double) outputHeight;
                // 根据缩放比率大的进行缩放控制
                double rate = rate1 < rate2 ? rate1 : rate2;
                newWidth = (int) (((double) bi2.getWidth(null)) / rate);
                newHeight = (int) (((double) bi2.getHeight(null)) / rate);
            } else {
                newWidth = outputWidth; // 输出的图片宽度
                newHeight = outputHeight; // 输出的图片高度
            }
            BufferedImage to = new BufferedImage(newWidth, newHeight,

            BufferedImage.TYPE_INT_RGB);

            Graphics2D g2d = to.createGraphics();

            to = g2d.getDeviceConfiguration().createCompatibleImage(newWidth, newHeight,

            Transparency.OPAQUE);

            g2d.dispose();

            g2d = to.createGraphics();

            Image from = bi2.getScaledInstance(newWidth, newHeight, bi2.SCALE_AREA_AVERAGING);
            g2d.drawImage(from, 0, 0, null);
            g2d.dispose();

            ImageIO.write(to, "jpg", new File(toFile));

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

    public static void main(String[] args) throws IOException {

        System.out.println("Start");

        resizePNG(new File("E:\\3.jpg"), "E:\\33.jpg", 960, 540, true);

        System.out.println("OK");

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Romel_wtp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值