我的数码相机拍摄的图像分辨率非常高,分辨率为3000 * 4000,需要大量的硬盘空间,我用Photoshop打开每张图片并重新调整尺寸,小分辨率,但它需要大量的时间和精力
我认为我可以编写简单的程序打开图像文件夹并读取每个文件并获取它的宽度和高度,如果它非常高,则更改它并用小图像覆盖图像。
答案 0 :(得分:7)
这里我在Java-EE项目中使用了一些代码(应该在正常的应用程序中工作:
int rw = the width I needed;
BufferedImage image = ImageIO.read(new File(filename));
ResampleOp resampleOp = new ResampleOp(rw,(rw * image.getHeight()) / image.getWidth() );
resampleOp.setFilter(ResampleFilters.getLanczos3Filter());
image = resampleOp.filter(image, null);
File tmpFile = new File(tmpName);
ImageIO.write(image, "jpg", tmpFile);
重新采样过滤器来自java-image-scaling库。如果您不喜欢Lanczos3,它还包含BSpline和Bicubic过滤器等。如果图像不在sRGB色彩空间中,Java会默默地将色彩空间转换为sRGB(这无疑是我需要的)。
Java也丢失了所有EXIF数据,认为它确实提供了一些(非常难以使用)的方法来检索它。对于颜色正确的渲染,您可能希望至少为文件添加sRGB标志。为此,请参阅here。
答案 1 :(得分:3)
+1其他一些人所说的不是特别需要Java的,但我想你一定知道这个并且可能会问,因为你要么想写这样的实用程序还是觉得它会很有趣? / p>
无论哪种方式,从dir获取图像文件列表是直截了当的,正确调整它们正确可以采取更多的腿部工作,因为你会注意到谷歌搜索最佳实践和看到9实际调整文件大小的不同方法。
我写了imgscalr来解决这个问题;它是一个简单易用的API(单一类,一堆静态方法),在webapps和其他利用它的工具中有很好的应用。
调整大小的步骤看起来像这样(大致):
有许多“调整大小”方法可以调用Scalr class,并且所有这些方法都会尊重图像的原始比例。因此,如果仅使用targetWidth(比如1024像素)进行缩放,则会为您计算高度,以确保图像看起来仍然完全正确。
如果您使用宽度和高度进行缩放,但它们会违反图像的比例并使其看起来“拉伸”,那么根据图像的方向(纵向或横向),一个尺寸将用作锚点,将透明地重新计算另一个不正确的维度。
您可以使用多种不同的质量设置和FIT-TO缩放模式,但该库的设计始终是“做正确的事”,因此使用它非常容易。
你可以通过源码挖掘,它是所有Apache 2许可的。您可以看到它实现了Java2D团队在Java中缩放图像的最佳实践,并且在自身之后进行了迂回清理,因此没有内存泄露。
希望有所帮助。
答案 2 :(得分:1)
AffineTransformOp
提供了选择插值类型的额外灵活性,如here所示。
答案 3 :(得分:1)
您不需要Java来执行此操作。这是浪费时间和资源。如果您有photoshop,可以使用录制操作:batch resize using actions
答案 4 :(得分:0)
您可以使用名为Sizester
的桌面图像大小调整应用程序单独或批量调整大小。我们的网站(www.sizester.com)上有一个完整的15天免费试用版。