java修改JPG图片DPI 不改变分辨率
2015-10-12 11:11
441 查看
package util; import java.awt.*; import java.awt.image.*; import java.io.*; import java.net.*; import javax.imageio.*; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.awt.Image; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.metadata.IIOMetadata; import javax.imageio.stream.FileImageInputStream; import javax.swing.ImageIcon; import org.w3c.dom.Element; import org.w3c.dom.Node; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImageManipulation { public static void main(String[] args) throws Exception { File infile = new File("D:/test/Scan_150925100019.jpg"); File outfile = new File("D:/test/300.jpg"); ImageReader reader = ImageIO.getImageReadersByFormatName("jpeg").next(); reader.setInput(new FileImageInputStream(infile), true, false); IIOMetadata data = reader.getImageMetadata(0); BufferedImage image = ImageIO.read(infile); int w = 2550, h = -1; // Image rescaled = image.getScaledInstance(w, h, Image.SCALE_AREA_AVERAGING); // BufferedImage output = toBufferedImage(rescaled, BufferedImage.TYPE_INT_RGB); // BufferedImage output = ImageIO.read(outfile); Element tree = (Element) data.getAsTree("javax_imageio_jpeg_image_1.0"); Element jfif = (Element) tree.getElementsByTagName("app0JFIF").item(0); for (int i = 0; i < jfif.getAttributes().getLength(); i++) { Node attribute = jfif.getAttributes().item(i); System.out.println(attribute.getNodeName() + "=" + attribute.getNodeValue()); } FileOutputStream fos = new FileOutputStream(outfile); JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(fos); JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image); jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH); jpegEncodeParam.setXDensity(300); jpegEncodeParam.setYDensity(300); jpegEncoder.encode(image, jpegEncodeParam); fos.close(); } public static BufferedImage toBufferedImage(Image image, int type) { int w = image.getWidth(null); int h = image.getHeight(null); BufferedImage result = new BufferedImage(w, h, type); Graphics2D g = result.createGraphics(); g.drawImage(image, 0, 0, null); g.dispose(); return result; } }
相关文章推荐
- SpringMVC的forward和redirect
- 各种Java加密算法二
- 韩顺平 java 第35讲 事件处理机制
- 各种Java加密算法一
- Java从入门到精通06-数组
- Eclipse4.5(Mars)安装SVN插件
- Java基础知识强化之IO流笔记56:IO流练习之 登录注册IO版
- Arrays类的使用
- Java NIO系列教程(七) FileChannel
- java compiler level does not match the version of the installed java project facet错误的解决
- android studio 导入eclipse 项目
- java中基本数据类型的相关问题
- eclipse打签名apk时出现GC limit error
- 【Java】抽象工厂模式
- java 中split()方法使用注意
- 【springmvc+mybatis项目实战】杰信商贸-34.业务出口报运WebService1
- 【SSH三框架】Struts2第六章的基础:他们拦截函数的定义
- Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列
- 一道Java程序输出题(继承-重载-覆盖-向上转型的问题)
- java web开发 高并发处理