最近做一个投票系统,要生成缩略图,一开始找了一段代码,速度还行,就是会失真,代码片段如下
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);
后来继续在网上找,发现要用到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();
在eclipse中提示找不到JPEGImageEncoder和JPEGCodec。就感觉很奇怪,为什么找不到???后来自己手动把头部加上去,就可以了
import com.sun.image.codec.jpeg.JPEGImageEncoder;import com.sun.image.codec.jpeg.JPEGCodec;
可能是eclipse对一些受限的方法自动屏蔽了。如果导入包路径后还报错的话,可以试试把eclipse对受限方法的警告等级从Error改为Warning。
解决办法:点击Window->Preferences->Java->Compiler->Errors/Warnings->Deprecated and restricted API->Forbidden reference(access rules) 修改成Warning 即可。