2012-05-15 52 views
2

我正在尋找一些代碼來獲取圖像在Java網站上的尺寸,而無需先下載它。這個想法是,如果圖像太大,我不會下載該文件,並會返回一條錯誤消息,因此用戶不會輸入導致文件太大的URL。這將需要圖像的高度和寬度。如何在不下載Java的情況下獲取Java網站圖片的尺寸?

我知道這個代碼,請從StackOverflow的其他用戶,這是否當你在系統上的文件:

private Dimension getImageDim(final String path) { 
Dimension result = null; 
String suffix = this.getFileSuffix(path); 
Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix); 
if (iter.hasNext()) { 
    ImageReader reader = iter.next(); 
    try { 
     ImageInputStream stream = new FileImageInputStream(new File(path)); 
     reader.setInput(stream); 
     int width = reader.getWidth(reader.getMinIndex()); 
     int height = reader.getHeight(reader.getMinIndex()); 
     result = new Dimension(width, height); 
    } catch (IOException e) { 
     log(e.getMessage()); 
    } finally { 
     reader.dispose(); 
    } 
} else { 
    log("No reader found for given format: " + suffix)); 
} 
return result; } 

但是,我不知道如何將它轉換成一些可以用在一個URL對象。

編輯:我對像素寬度和像素高度感興趣。

+1

請注意,您的代碼正在讀取本地文件。 –

回答

4

對不起,我沒有代碼顯示你,但我可以給一般建議。您對圖像的大小(寬度*高度像素)或文件大小(需要下載的字節)感興趣嗎?

要獲取文件大小,您可以嘗試向遠程服務器發出HTTP HEAD請求。這將返回頭文件而不下載文件 - ContentLength頭文件可能包含文件的大小。或者它可能不是,它是可選的。

以像素爲單位獲取寬度和高度需要下載至少部分文件。這些值以JPEG文件格式存儲在SOI(圖像開始)記錄中,該格式應該靠近文件的開頭。您可以下載圖像的第一部分並解析返回的字節,以查找SOI標記(0xFFD8)。

2

您需要的信息在您需要下載的文件中。

我不認爲你可以做到這一點,沒有在服務器端的東西告訴你圖像的尺寸。這讓我覺得服務器相當昂貴。可能比發送圖像文件更昂貴...除非您可以找到某種方法來提取圖像的大小元數據,而不必將其完全讀取到服務器端的內存中。

相關問題