我有一個來自URL(公司內部)的PNG圖像。當我在我的網絡瀏覽器中導航到該URL時,我看到圖像正確(具有透明度)。從Chrome的網絡工具中我可以看到,它會像預期的那樣成爲一款圖像/ png MIME類型。我可以將圖像從瀏覽器保存到我的本地硬盤,最終大小約爲32kb。Web瀏覽器中的圖像與Java中的圖像之間的區別
我寫了一個簡單的Java程序來拉下圖像並以編程方式保存。保存圖像代碼非常簡單,如下所示:
public static void saveImage(String imageUrl, String destinationFile) throws IOException {
URL url = new URL(imageUrl);
InputStream is = url.openStream();
OutputStream os = new FileOutputStream(destinationFile);
byte[] b = new byte[2048];
int length;
while ((length = is.read(b)) != -1) {
os.write(b, 0, length);
}
is.close();
os.close();
}
但是,每當我運行該程序時,保存的圖像就會失真。除了失去透明度之外,它看起來大致相同。它的大小隻有大約4kb。除此之外,只看字節,我可以看到前3個字節是「GIF」。
任何人都可以幫助我理解造成這種差別的原因嗎?
(注:我使用的是在這兩種情況下實際的圖像URL指向這是使用ImageIO.read返回從真實圖像URL一個BufferedImage Java Web應用程序
@RequestMapping(value="/{id}", method={RequestMethod.GET,RequestMethod.POST})
public @ResponseBody BufferedImage getImage(@PathVariable String id) {
try {
//Modified slightly to protect the innocent
return ImageIO.read((new URL(IMAGE_URL + id)).openStream());
} catch (IOException io) {
return defaultImage();
}
}
,並在我的Spring上下文文件我有:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="order" value="1" />
<property name="messageConverters">
<list>
<!-- Converter for images -->
<bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter">
<property name="defaultContentType" value="image/png"/>
</bean>
<!-- This must come after our image converter -->
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
如果這種額外的層有差別,但我認爲最好提它不知道)
任何意見/建議將是多大的應用reciated。
感謝, B.J.
我的歉意,我沒有包括額外的Spring代碼進行澄清。我編輯了我的問題以反映Spring圖像轉換器的使用。 – Benny 2013-03-25 15:38:45
@Benny Chrome和Java應用程序是否觸發相同的轉換代碼。我的猜測是,Java應用程序沒有將所有相同的標題設置爲chrome,所以服務器返回不同的數據。 – 2013-03-25 21:20:31