栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java中提高分辨率并减小图像大小

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java中提高分辨率并减小图像大小

这很棘手,因为就像Java中的许多事情一样,您不能仅以简单的方式访问某些内容。Java不会跟踪DPI,但是会使用每毫米的点数。另外,另一个令人困惑的部分是您不能更改图像或BufferedImage中的此类信息。仅当通过ImageWriter写入BufferedImage时,才能更改此信息。

我能够做到这一点。如我所说,我可以指定返回给我的图像的缩放比例。无论缩放级别如何,输出均为72
DPI。我的目标是300DPI。我指定了400%的缩放比例。因此,在8英寸宽,72 DPI的图像上,向我返回了32英寸72
DPI的图像。我要做的就是将DPI指定为288(72 x 4),以覆盖我正在处理的默认72
DPI,然后在将其写出时,图像具有相同数量的像素,但被认为是在288 DPI,而不是72 DPI。

这是一个代码片段:

//假设已经有一个ImageWriter iw

ImageWriteParam writeParam = writer.getDefaultWriteParam();ImageTypeSpecifier typeSpecifier =       ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);IIOmetadata metadata = writer.getDefaultImagemetadata(typeSpecifier, writeParam);if (metadata.isReadonly() || !metadata.isStandardmetadataFormatSupported()) {    continue;}

//设置参数和信息

int DPI = 72 * scaling/100;double dotsPerMilli = 1.0 * DPI / 10 / 2.54;double checkDots = 1.0 * 144 / 10 / 2.54;System.out.println("Dots per inch: " + DPI + ", DotsPerMilli: " + dotsPerMilli + ",    CheckDots = " + checkDots);IIOmetadataNode root = new IIOmetadataNode("javax_imageio_1.0");IIOmetadataNode horiz = new IIOmetadataNode("HorizontalPixelSize");horiz.setAttribute("value", Double.toString(dotsPerMilli));IIOmetadataNode vert = new IIOmetadataNode("VerticalPixelSize");vert.setAttribute("value", Double.toString(dotsPerMilli));IIOmetadataNode dim = new IIOmetadataNode("Dimension");dim.appendChild(horiz);dim.appendChild(vert);root.appendChild(dim);metadata.mergeTree("javax_imageio_1.0", root);

//从这里开始,只需使用ImageOutputStream写出文件

final ImageOutputStream stream = ImageIO.createImageOutputStream(outFile);System.out.println("Output file: " + outFile);try {    writer.setOutput(ImageIO.createImageOutputStream(outFile));    writer.write(metadata, new IIOImage(image_to_save, null, metadata),    writeParam);} catch (Exception e) {    System.out.println("Caught exception " + e + " when trying to write out        file.");    System.exit(0);} finally {    stream.close();}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/463536.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号