3

我正在寻找一个 Java 库来进行图像裁剪/调整大小。我曾计划使用 jmagick,但它似乎自 2009 年以来就没有得到维护。

这是最好的图书馆吗?有什么推荐吗?!

编辑

我想做的一件事是能够填充图像以调整大小以及裁剪它。即,如果我有一个 4x2 图像,并且我想将其制作为正方形,我想将其制作为 4x4,每边都有黑色或白色填充。这在图像处理中有名称吗?它是任何库附带的功能吗?

4

2 回答 2

20

我维护Thumbnailator,这是一个 Java 缩略图生成库,它提供了调整图像大小的方法,并通过易于使用的fluent API进行一些简单的图像操作。

Thumbnailator 提供的功能之一是Canvas过滤器,它可以对生成的缩略图执行裁剪和填充(或信箱)。

填充图像

例如,使用Canvas过滤器填充图像可以通过以下方式实现:

Thumbnails.of("path/to/image.jpg")
  .size(150, 150)
  .addFilter(new Canvas(150, 150, Positions.CENTER, Color.blue))
  .toFile("path/to/padded-image.jpg");

以上将:

  1. size拍摄原始图像并通过该方法将其缩小到 150 x 150 以内。
  2. 然后,该方法指定的附加过滤步骤addFilter将添加蓝色填充(使用Color.blue)以生成尺寸为 150 x 150 的最终图像。
  3. 将生成的缩略图保存到path/to/padded-image.jpg.

在肖像图片上使用上面的代码会产生以下结果:

填充图像
(来源:coobird.net

裁剪图像

使用滤镜裁剪图像Canvas可以通过以下方式实现:

Thumbnails.of("path/to/image.jpg")
  .size(150, 150)
  .addFilter(new Canvas(100, 100, Positions.TOP_RIGHT, true))
  .toFile("path/to/cropped-image.jpg");

上面的代码将:

  1. size拍摄原始图像并通过该方法将其缩小到 150 x 150 以内。
  2. 然后,一个额外的过滤步骤将从调整大小的图像的右上角裁剪出一个 100 x 100 的区域。(构造函数调用true中存在的参数Canvas表示如果图像大于指定尺寸,则应裁剪图像。)
  3. 将生成的缩略图保存到path/to/cropped-image.jpg.

运行上述代码的示例如下:

裁剪图像
(来源:coobird.net


目前有一些功能要求使裁剪成为 Thumbnailator API 更不可或缺的一部分,因此我计划在未来添加一个方法,以减少在大多数情况下crop调用该方法的需要。addFilter

于 2011-11-16T14:41:31.963 回答
0

你可以试试这个:

BufferedImage image=ImageIO.read(new FileInputStream("<youFile.jpg>"));
int min=0;
if(image.getWidth()>image.getHeight())
    min=image.getHeight();
else
    min=image.getWidth();

Thumbnails.of(image)
    .sourceRegion(Positions.CENTER, min, min)
    .size(250, 250)
  .toFile("<outputFile.jpg>");
于 2016-02-25T03:57:24.817 回答