【问题标题】:Resize image without loss of information在不丢失信息的情况下调整图像大小
【发布时间】:2015-03-01 18:37:11
【问题描述】:

我试图做与 MS Word 中相同的调整图像大小的功能。

我想调整 BufferedImage 的大小,但在调整大小的过程中丢失了一些信息。

我尝试实现两种方法,但都产生了相同的结果。

在任何调整大小之前:

在我的应用程序中进行几次调整大小操作后的图片:

第一种方法:

image = Thumbnails.of(image).size(w,h).asBufferedImage();

第二种方法:

image = toBufferedImage(image.getScaledInstance(w, h, Image.SCALE_SMOOTH));

image 是 BufferedImage 的实例,w 是图像的新宽度,h 是图像的新高度

知道吗,我做错了什么?

【问题讨论】:

标签: java image resize scale bufferedimage


【解决方案1】:

每次尝试调整大小后,您都会不断丢失图像中的信息。如果您想要解决方案(例如在 MS Word 中),您必须保留原始图像但仅显示调整大小的副本。

最好的解决方案是创建一个对象来存储原始图像并根据需要制作调整大小的副本。您可以通过添加简单缓存来提高此解决方案的质量,这样您实际上就不会为每个请求生成另一个调整大小的图像副本,但前提是您的应用程序需要与上次不同高度或宽度的图像。

希望对你有所帮助。

【讨论】:

  • 此外,请阅读这篇[1] 文章,了解调整任何图像大小的更好方法。 [1] - java.net/pub/a/today/2007/04/03/…
  • 是的,Image.getScaledInstance() 是异步的,而且比现有的替代方案要慢得多。
  • 这并不容易,但它确实有效。记住原始图像后,需要记住图像最后尺寸的纵横比。我用这个简单的算法做到了:coderanch.com/t/467505/java/java/…
猜你喜欢
  • 2016-08-10
  • 1970-01-01
  • 2018-05-20
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多