您的位置:首页 > 其它

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

2015-08-08 19:55 302 查看

最近使用一些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");

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: