我有很多圖像是由我的數碼相機以非常高的分辨率3000 * 4000拍攝的,需要大量的硬盤空間,我用Photoshop打開每張圖像並重新調整大小。小分辨率,但它需要大量的時間和精力調整圖像文件的大小
我認爲我可以編寫簡單的程序,打開圖像的文件夾,並讀取每個文件,並獲得它的寬度和高度,如果它非常高改變它並覆蓋與小的圖像。
我有很多圖像是由我的數碼相機以非常高的分辨率3000 * 4000拍攝的,需要大量的硬盤空間,我用Photoshop打開每張圖像並重新調整大小。小分辨率,但它需要大量的時間和精力調整圖像文件的大小
我認爲我可以編寫簡單的程序,打開圖像的文件夾,並讀取每個文件,並獲得它的寬度和高度,如果它非常高改變它並覆蓋與小的圖像。
你不需要Java來做到這一點。這是浪費時間和資源。如果你有photoshop,你可以通過錄制動作來做到這一點:batch resize using actions
是的,如果你正在分發一個應用程序,這是行不通的。我不打算讓我的用戶花費數百美元,以便我可以使用photoshops批量功能。 – Codeguy007 2013-06-01 12:29:23
這裏是一些代碼,我在一個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。
AffineTransformOp
爲選擇插補類型提供了額外的靈活性,如here所示。
+1對於其他人所說的關於不是特別需要Java的這個,但我想你一定知道這個,也許是因爲你要麼問想寫這樣一個實用程序或認爲它會很有趣?
無論哪種方式,獲取圖像文件從一個目錄列表是直線前進,調整其大小,正確可以採取多一點專家組的工作,你會從谷歌搜索的最佳實踐,看到約9種不同的方式來通知實際上調整文件大小。
我寫了imgscalr來解決這個問題;這是一個非常簡單的API(單一類,一堆靜態方法),並且在webapps和其他利用它的工具中有很好的應用。
步驟來調整應該是這樣的(大約):
有很多「調整大小」的方法來調用Scalr class,他們都尊重圖像的原始比例。因此,如果您僅使用targetWidth進行縮放(例如1024像素),則會計算高度以確保圖像看起來完全正確。
如果您使用寬度和高度進行縮放,但它們會違反圖像的比例並使其看起來「拉伸」,那麼基於圖像的方向(縱向或橫向),將使用一個尺寸作爲錨點另一個不正確的尺寸將透明地重新計算。
您還可以使用多種不同的質量設置和FIT-TO縮放模式,但該庫的設計始終是「做正確的事情」,因此使用它非常容易。
您可以通過源代碼挖掘,它是所有Apache 2許可的。您可以看到它實現了Java2D團隊在Java中縮放圖像的最佳實踐,並且自行清理完畢,從而不會泄漏內存。
希望有所幫助。
您可以使用名爲Sizester
的桌面圖像調整大小應用程序單獨或批量調整大小。在我們的網站(www.sizester.com)上有完整的15天免費試用版。
Photoshop有批量操作:http://www.digital-photography-school.com/how-to-batch-resize-in-photoshop。如果你仍然想在Java中DIY,看看BufferedImage – I82Much 2011-05-06 18:37:18
你確定要使用Java嗎?像[ImageMagick](http://www.imagemagick.org/script/index.php)可能更適合這項任務。即使你必須經過Cygwin。 – 2011-05-06 18:38:04
如果有任何其他簡單的解決方案,我會很高興做到這一點:D – 2011-05-06 18:39:37