3

我需要制作从 flickr 下载的图像以适合 500x500 的形状。如果纵横比不是 1:1,则应在顶部/底部或左侧/右侧添加黑条以填充空白空间。透明背景也可以。重要的是 500x500 并在不裁剪的情况下调整大小。我怎么能在java中做到这一点?

4

1 回答 1

4

克里斯,

你可以试试imgscalr;它实现了在 Java 中缩放图像的最优化方法,并且(默认情况下)在调整大小时尊重原始图像的方向和比例......它还提供了一个非常方便的pad(...)操作,它将为您提供边框你要。

它唯一不会为您做的事情是自动填充缩放后的图片和完美正方形 500x500 尺寸之间的差异,但您可以将图像缩放到 498x498 之类的东西 - 它会给您一个适合主要尺寸的比例结果( horz 或 port 取决于方向),然后你可以 pad(2) 给它一个漂亮的边框,你想要的任何颜色,包括透明的。

例如,代码看起来像这样(使用静态导入来提高可读性):

import org.imgscalr.Scalr.*;
import java.awt.Color;

public static BufferedImage createThumbnail(BufferedImage img) {
    // Target width of 500x500 is used
    img = resize(img, 500); 
    return pad(img, 2, Color.BLACK);
}

resize() 方法采用任意数量的附加参数来调整拟合行为、图像质量、操作速度等。

您还可以通过将其作为最后一个 arg 传递以调整大小或填充(或任何其他操作),在返回结果之前(此处)在结果图像上应用任何预定义的 OP。

此外,如果您尝试在服务器进程中执行此操作并希望异步运行这些操作,您可以查看提供所有相同功能的AsyncScalr类,但将操作排队到可配置数量的缩放线程以避免饱和主机。

在过去几年中,imgscalr 已部署在生产环境中的许多服务器和客户端场景中。如果您有机会试用图书馆,我很想听听您的反馈。

于 2012-07-24T16:49:21.227 回答