新保存的图像文件没有重新调整大小吗?

49 浏览
0 Comments

新保存的图像文件没有重新调整大小吗?

我需要调整PNG、JPEG和GIF文件的大小。我该如何使用Java来实现这个功能?

0
0 Comments

问题的出现的原因是在创建缩略图时,没有提供指定的尺寸选项。解决方法是在创建缩略图时,使用size(width, height)方法指定缩略图的尺寸。

Thumbnailator是一个用于Java的开源图像调整库,具有流畅的接口,并在MIT许可下分发。

我写了这个库是因为在Java中制作高质量的缩略图可能会出乎意料地困难,并且导致的代码可能会很混乱。使用Thumbnailator,可以使用简单的流畅API来表达相当复杂的任务。

一个简单的例子是,将一个图像调整为100 x 100(保留原始图像的纵横比),并将其保存到文件中,可以通过一条语句实现:

Thumbnails.of("path/to/image")
    .size(100, 100)
    .toFile("path/to/thumbnail");

Thumbnailator的流畅接口简化了执行复杂的调整任务。

假设我们想要进行以下操作:

1. 获取目录中的图像,

2. 将它们调整为100 x 100,保留原始图像的纵横比,

3. 将它们全部保存为JPEG,并设置质量为0.85,

4. 文件名采用原始文件名,并在开头添加"thumbnail."

使用Thumbnailator,我们可以通过以下方式实现上述操作:

Thumbnails.of(new File("path/to/directory").listFiles())
    .size(100, 100)
    .outputFormat("JPEG")
    .outputQuality(0.85)
    .toFiles(Rename.PREFIX_DOT_THUMBNAIL);

这个库还使用了《Filthy Rich Clients》一书中提到的渐进式双线性缩放方法,以生成高质量的缩略图,同时确保可接受的运行时性能。

关于图像质量和速度的问题,这个库还支持流,适用于SSH客户端等应用。

如果想要创建一个80x80的缩略图,从一个500x400的原始图像中,可以使用size(80,80)方法指定缩略图的尺寸,并使用crop(Positions.CENTER)方法进行裁剪:

Thumbnails.of(..)
    .size(80, 80)
    .crop(Positions.CENTER)
    .toFile( ... );

使用Thumbnailator相比尝试使用Java原生方法,可以获得100%的质量改进。

以上就是关于(new saved Image file not Redimensioned?)问题的原因和解决方法的详细内容。

0
0 Comments

问题出现的原因:

在使用imgscalr这个Java图像缩放库时,有用户报告说在调用resize方法时出现了错误。错误信息是"The method resize(BufferedImage, int, BufferedImageOp...) in the type Scalr is not applicable for the arguments (Embedded, int)"。

问题的解决方法:

根据开发者的回答,问题出现的原因是传入的参数类型不正确。imgscalr只接受BufferedImage类型的参数,而传入的是Embedded类型的参数,所以出现了错误。由于Embedded类型在该上下文中没有定义,开发者猜测可能是在Android平台上使用imgscalr库导致的。因为Android平台缺少imgscalr所依赖的Java2D/ImageIO库。

最近,我发布了一个简单的Java图像缩放库,名为imgscalr。该库实现了几种不同的图像缩放方法,并且在调用时会自动选择最优的方法。使用该库非常简单,只需要调用几个静态方法即可。下面是一个简单的用例:

BufferedImage scaledImage = Scalr.resize(myImage, 200);

该方法会将图像缩放到宽度和高度都不超过200像素的范围内,同时保持图像的原始比例。

有用户报告说在调用resize方法时出现了错误,错误信息是"The method resize(BufferedImage, int, BufferedImageOp...) in the type Scalr is not applicable for the arguments (Embedded, int)"。经过分析,发现错误是由于传入的参数类型不正确导致的。imgscalr只接受BufferedImage类型的参数,而传入的是Embedded类型的参数,所以出现了错误。根据开发者的回答,可能是因为在Android平台上使用imgscalr库导致的。因为Android平台缺少imgscalr所依赖的Java2D/ImageIO库。

如果你想使用imgscalr库,但又不想使用Maven,你可以直接从Maven central下载jar包。

imgscalr是一个Java图像缩放库,提供了多种图像缩放方法。使用该库非常简单,只需要调用几个静态方法即可。但在使用过程中,需要注意传入的参数类型必须是BufferedImage类型,否则会出现错误。此外,imgscalr库在Android平台上无法使用,因为Android缺少必要的Java2D/ImageIO库。如果你想使用imgscalr库,但又不想使用Maven,可以直接从Maven central下载jar包。

0