在Java中调整图像大小以减小图像大小

在Java中调整图像大小以减小图像大小,java,image-processing,Java,Image Processing,我有一个尺寸为800x800的图像,大小为170KB。我想将此图像的大小调整为600x600。调整大小后,我希望图像大小减少。我怎样才能做到这一点呢?使用一些支持通过Java进行图像处理的好框架,例如 Java中还提供了一些基本的支持,通过一些类,如和。您不需要一个完整的图像处理库来简单地调整图像的大小 推荐的方法是使用渐进双线性缩放,就像这样(请随意使用代码中的这种方法): 现在,由于os是一个ByteArrayOutputStream,您可以对其进行Base64编码 String base6

我有一个尺寸为800x800的图像,大小为170KB。我想将此图像的大小调整为600x600。调整大小后,我希望图像大小减少。我怎样才能做到这一点呢?

使用一些支持通过Java进行图像处理的好框架,例如


Java中还提供了一些基本的支持,通过一些类,如和。

您不需要一个完整的图像处理库来简单地调整图像的大小

推荐的方法是使用渐进双线性缩放,就像这样(请随意使用代码中的这种方法):

现在,由于
os
是一个
ByteArrayOutputStream
,您可以对其进行Base64编码

String base64 = Base64.encode(os.toByteArray());

您可以使用100%Java、Apache2开源(单个静态类)并执行以下操作:

import org.imgscalr.Scalr.*; // static imports are awesome with the lib

... some class code ...

// This is a super-contrived method name, I just wanted to incorporate
// the details from your question accurately.
public static void resizeImageTo600x600(BufferedImage image) {
    ImageIO.write(resize(image, 600), "JPG", new File("/path/to/file.jpg"));
}
注意:如果上述情况看起来很奇怪,静态导入允许我直接使用resize调用,而无需指定Scalr.resize(…)

此外,如果写入的缩放图像的质量看起来不够好(但会很快写入),可以使用更多参数来调整大小方法,如下所示:

public static void resizeImageTo600x600(BufferedImage image) {
    ImageIO.write(resize(image, Method.ULTRA_QUALITY, 600), "JPG", new File("/path/to/file.jpg"));
}
。。您甚至可以对结果应用BufferedImageOp来软化它,以防缩小使图像看起来锯齿状:

public static void resizeImageTo600x600(BufferedImage image) {
    ImageIO.write(resize(image, Method.ULTRA_QUALITY, 600, Scalr.OP_ANTIALIAS), "JPG", new File("/path/to/file.jpg"));
}
只需在Maven POM中添加以下dep条目(imgscalr位于Maven central repo中),即可开始使用该库:


org.imgscalr
imgscalr库
4.2
罐子
编译

我查过了。我想在我的Java程序中这样做!我用核心Java中的基本支持信息更新了答案。希望有帮助。你可以看看1)“在调整大小后,我希望图像大小减小。”当保存在内存中,或序列化为PNG、JPG或GIF时?第一个将导致字节减少,第二个通常不会。2) 图像的格式是什么?(PNG、GIF、JPEG..)如果格式为JPEG,则通过提高压缩比来减少磁盘上的图像字节大小可能会更有效。请参阅示例源。我想在调整图像大小后减小图像大小(以字节为单位),以便通过套接字发送图像。dataoutputstream表示编码字符串(Base64)太大。请改为Base64编码JPEG字节。你可以用
ImageIO
来做这个。天才,这很有效,现在我意识到我甚至不需要scaler,谢谢。但真正的诀窍是使用.jpg格式而不是.png格式。出于好奇,既然已经有了库,为什么不使用它呢?我是说你为什么要使用自定义代码?Gracias,te amoI不懂许可证。我可以在个人网站中使用它吗?如果图像较小,它会放大吗?链接被破坏,导致恶意网站。@yurin谢谢你的提醒-修复!
public static void resizeImageTo600x600(BufferedImage image) {
    ImageIO.write(resize(image, Method.ULTRA_QUALITY, 600), "JPG", new File("/path/to/file.jpg"));
}
public static void resizeImageTo600x600(BufferedImage image) {
    ImageIO.write(resize(image, Method.ULTRA_QUALITY, 600, Scalr.OP_ANTIALIAS), "JPG", new File("/path/to/file.jpg"));
}
<dependency> 
  <groupId>org.imgscalr</groupId>
  <artifactId>imgscalr-lib</artifactId>
  <version>4.2</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>