URL (会社の内部) からの PNG 画像があります。Web ブラウザーでその URL に移動すると、画像が正しく表示されます (透過性あり)。Chrome のネットワーク ツールから、期待どおり image/png MIME タイプとして返されていることがわかります。ブラウザからローカル ハード ドライブに画像を保存すると、最終的に約 32 KB のサイズになります。
画像をプルダウンしてプログラムで保存する簡単な 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();
}
}
私の春のコンテキストファイルには次のものがあります:
<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>
この余分なレイヤーが違いを生むかどうかはわかりませんが、言及するのが最善だと思いました.)
どんなアイデア/提案も大歓迎です。
ありがとう、BJ