java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/JPEGCodec

这个类在 rt.jar 里面

本地开发,jre里有这个包,所以不会报错

但是在新的 jdk 版本中,这个类不推荐使用了,使用 ImageIO.write 方法替代

最新的代码如下:

(Java 压缩微信头像的工具方法)

从url获取压缩后的图片,以base64返回 ( data:image/jpeg;base64,)

public static String getCompressBase64FromUrl(String url, int width, int height) throws Exception {
    Image img = ImageIO.read(new URL(url));
    BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    // Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的优先级比速度高 生成的图片质量比较好 但速度慢
    tag.getGraphics().drawImage(img.getScaledInstance(60, 60, Image.SCALE_SMOOTH), 0, 0, null);
 
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(tag, "jpeg", baos); // 这里也可以传 FileOutputStream 写进文件里
    return new String(Base64.encodeBase64(baos.toByteArray()));
}

// 原过时写法
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos);
// encoder.encode(tag);