2011-05-06 179 views
1

我有很多图像是由我的数码相机以非常高的分辨率3000 * 4000拍摄的,需要大量的硬盘空间,我用Photoshop打开每张图像并重新调整大小。小分辨率,但它需要大量的时间和精力调整图像文件的大小

我认为我可以编写简单的程序,打开图像的文件夹,并读取每个文件,并获得它的宽度和高度,如果它非常高改变它并覆盖与小的图像。

+1

Photoshop有批量操作:http://www.digital-photography-school.com/how-to-batch-resize-in-photoshop。如果你仍然想在Java中DIY,看看BufferedImage – I82Much 2011-05-06 18:37:18

+6

你确定要使用Java吗?像[ImageMagick](http://www.imagemagick.org/script/index.php)可能更适合这项任务。即使你必须经过Cygwin。 – 2011-05-06 18:38:04

+0

如果有任何其他简单的解决方案,我会很高兴做到这一点:D – 2011-05-06 18:39:37

回答

1

你不需要Java来做到这一点。这是浪费时间和资源。如果你有photoshop,你可以通过录制动作来做到这一点:batch resize using actions

+0

是的,如果你正在分发一个应用程序,这是行不通的。我不打算让我的用户花费数百美元,以便我可以使用photoshops批量功能。 – Codeguy007 2013-06-01 12:29:23

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库也包含在其他B样条和双三次过滤器,如果你不。不喜欢Lanczos3。如果图像不在sRGB色彩空间中,Java默默地将色彩空间转换为sRGB(这意外是我所需要的)

此外,Java失去了所有EXIF数据,认为它提供了一些很难使用)方法来检索它。对于颜色正确的渲染,你可能希望至少添加一个sRGB标志文件。有关详情,请参阅here

3

+1对于其他人所说的关于不是特别需要Java的这个,但我想你一定知道这个,也许是因为你要么问想写这样一个实用程序或认为它会很有趣?

无论哪种方式,获取图像文件从一个目录列表是直线前进,调整其大小,正确可以采取多一点专家组的工作,你会从谷歌搜索的最佳实践,看到约9种不同的方式来通知实际上调整文件大小。

我写了imgscalr来解决这个问题;这是一个非常简单的API(单一类,一堆静态方法),并且在webapps和其他利用它的工具中有很好的应用。

步骤来调整应该是这样的(大约):

  1. 获取文件列表
  2. BufferedImage的图像= ImageIO.read(文件[1]);
  3. image = Scalr.resize(image,width);
  4. ImageIO.write(image);

有很多“调整大小”的方法来调用Scalr class,他们都尊重图像的原始比例。因此,如果您仅使用targetWidth进行缩放(例如1024像素),则会计算高度以确保图像看起来完全正确。

如果您使用宽度和高度进行缩放,但它们会违反图像的比例并使其看起来“拉伸”,那么基于图像的方向(纵向或横向),将使用一个尺寸作为锚点另一个不正确的尺寸将透明地重新计算。

您还可以使用多种不同的质量设置和FIT-TO缩放模式,但该库的设计始终是“做正确的事情”,因此使用它非常容易。

您可以通过源代码挖掘,它是所有Apache 2许可的。您可以看到它实现了Java2D团队在Java中缩放图像的最佳实践,并且自行清理完毕,从而不会泄漏内存。

希望有所帮助。

0

您可以使用名为Sizester的桌面图像调整大小应用程序单独或批量调整大小。在我们的网站(www.sizester.com)上有完整的15天免费试用版。