Java中图片压缩处理
2015-08-28 08:48
447 查看
package aa; import java.io.*; import java.util.Date; import java.awt.*; import java.awt.image.*; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.*; /** * 图片压缩处理 * * * 报错: Access restriction:The type JPEGCodec is not accessible due to * restriction on required library C:\Program Files\Java\jre6\lib\rt.jar * * 解决方法: Project -> Properties -> libraries, 先remove掉JRE System Library,然后再Add * Library重新加入。 ============================================ * 在Eclipse中处理图片,需要引入两个包: import com.sun.image.codec.jpeg.JPEGCodec; import * com.sun.image.codec.jpeg.JPEGImageEncoder; 报错: Access restriction: The type * JPEGImageEncoder is not accessible due to restriction on required library * C:\Java\jre1.6.0_07\lib\rt.jar * * * 此时解决办法: Eclipse 默认把这些受访问限制的API设成了ERROR。只要把Windows-Preferences-Java-Complicer- * Errors/Warnings里面的Deprecated and restricted API中的Forbidden references(access * rules)选为Warning就可以编译通过。 优先选择第一种方法 */ public class ImgCompress { private Image img; private int width; private int height; @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { System.out.println("开始:" + new Date().toLocaleString()); ImgCompress imgCom = new ImgCompress("D:\\11.jpg"); imgCom.resizeFix(600, 600); System.out.println("结束:" + new Date().toLocaleString()); } /** * 构造函数 */ public ImgCompress(String fileName) throws IOException { File file = new File(fileName);// 读入文件 img = ImageIO.read(file); // 构造Image对象 width = img.getWidth(null); // 得到源图宽 height = img.getHeight(null); // 得到源图长 } /** * 按照宽度还是高度进行压缩 * * @param w * int 最大宽度 * @param h * int 最大高度 */ public void resizeFix(int w, int h) throws IOException { if (width / height > w / h) { resizeByWidth(w); } else { resizeByHeight(h); } } /** * 以宽度为基准,等比例放缩图片 * * @param w * int 新宽度 */ public void resizeByWidth(int w) throws IOException { int h = (int) (height * w / width); resize(w, h); } /** * 以高度为基准,等比例缩放图片 * * @param h * int 新高度 */ public void resizeByHeight(int h) throws IOException { int w = (int) (width * h / height); resize(w, h); } /** * 强制压缩/放大图片到固定的大小 * * @param w * int 新宽度 * @param h * int 新高度 */ public void resize(int w, int h) throws IOException { // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢 BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图 File destFile = new File("D:\\333.jpg"); FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流 // 可以正常实现bmp、png、gif转jpg JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(image); // JPEG编码 out.close(); } }
相关文章推荐
- 共享内存在Java中实现和应用
- Java中Synchronized和Lock的使用
- spring-mvc防止表单重复提交
- Spring MVC @关键字总结
- 基于Spring-DM实现分布式服务框架(DSF)(一)
- java基础笔记
- SpringMVC原理
- java时间格式串
- Java读取配置文件的几种方法以及路径问题
- java里类方法和实例方法区别
- java多线程(九)阻塞队列
- java成员变量和局部变量区别
- 在Eclipse中提交SVN项目的时候注意提交项目信息
- How to setup Wicket Examples in Eclipse
- 从零开始学Java之 出入门卫管理系统(一)
- 让Style帮你减少JAVA的错误
- Java 中的 Timer 使用和 Quartz 的基本使用(集成了 Spring)
- Struts2中的ModelDriven机制及其运用
- (Java)《head first java》值得Java或面向对象基础的新手看。
- JAVA里面的IO流(一)分类1(字节/字符和输入/输出)