#备注贴# 关于Java保真压缩的问题

 

最近做一个投票系统,要生成缩略图,一开始找了一段代码,速度还行,就是会失真,代码片段如下

File source = new File(storagePath + filename_source);
File target = new File(storagePath + filename_target);
FileInputStream fis = new FileInputStream(source);
BufferedImage sourceImg = ImageIO.read(fis);
fis.close();
int imgWidth = sourceImg.getWidth();//获取原图高
int imgHeight = sourceImg.getHeight();//获取原图宽

int width = imageWidth * scale;//新的宽
int height = imageHeight * scale;//新的高

BufferedImage targetImg = new BufferedImage(width, height,
                    BufferedImage.SCALE_SMOOTH);
targetImg.createGraphics().drawImage(sourceImg, 0, 0, width,
                    height, null);
ImageIO.write(targetImg, ext, target);
View Code

后来继续在网上找,发现要用到JPEGImageEncoder和JPEGCodec。代码片段如下。

1 BufferedImage targetImg = new BufferedImage(width, height,
2                     BufferedImage.TYPE_INT_RGB);
3             targetImg.getGraphics().drawImage(sourceImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
4 FileOutputStream os = new FileOutputStream(source);
5 JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(os);
6 encoder.encode(targetImg);
7 os.close();
View Code

在eclipse中提示找不到JPEGImageEncoder和JPEGCodec。就感觉很奇怪,为什么找不到???后来自己手动把头部加上去,就可以了

import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
View Code

可能是eclipse对一些受限的方法自动屏蔽了。如果导入包路径后还报错的话,可以试试把eclipse对受限方法的警告等级从Error改为Warning。

解决办法:点击Window->Preferences->Java->Compiler->Errors/Warnings->Deprecated and restricted API->Forbidden reference(access rules) 修改成Warning 即可。

 

posted @ 2013-09-12 09:19  leeshunpeng  阅读(224)  评论(0)    收藏  举报