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");
}
}
相关文章推荐
- C++(28)自增/自减操作符
- MyEclipse配置Tomact运行环境
- java---面试题---.java"源文件中可以包括多个类(不是内部类)
- C++(27)输入/输出、算术/关系操作符
- 死锁
- C++(26)重载操作符的定义
- 中兴月容纳杯 数字配对
- 哆啦A梦杀入中国手游 是惊喜还是惊吓
- Java中的构造函数
- block的使用二(排序)
- 关于ie浏览器的条件注释
- iOS第三方Api及常用框架总结
- Code Forces 469C 24 Game
- Longest Consecutive Sequence
- C++(25)管理指针成员
- 纯CSS实现提示框小三角
- android自定义UI模板图文详解
- UIScrollView无法滚动的解决办法
- ubuntu登陆输入密码后返回到登陆界面
- C++(24)消息处理示例