загрузить изображение, но размер изображения не соответствует kotlin - PullRequest
0 голосов
/ 13 февраля 2020

Я обнаружил удивительную проблему при загрузке изображения.

URL-адрес изображения http://www.xbiquge.la/files/article/image/50/50353/50353s.jpg

Я могу открыть и сохранить его в chrome. Но когда я загружаю его по код, он не работает.

Я не могу открыть его средством просмотра изображений.

Примечание. Размер неправильного изображения меньше размера файла правильного изображения. И другого изображения с другим сайтом все в порядке.

Я не знаю, что произойдет. Пожалуйста, помогите, спасибо заранее

Ниже приведен мой код

val imgUrl = "http://www.xbiquge.la/files/article/image/50/50353/50353s.jpg"
val conn = URL(imgUrl).openConnection()
val bytes = conn.getInputStream().readBytes()
File("D:\\test.jpg").writeBytes(bytes)

Я также пытаюсь используйте java для загрузки образа. Это также ошибка ...

URL url = new URL("http://www.xbiquge.la/files/article/image/50/50353/50353s.jpg");
URLConnection connection=url.openConnection();
InputStream inputStream = connection.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("d:\\download.jpg")));
int c;
byte[] temp = new byte[1024 * 2];
while ((c = bufferedInputStream.read(temp)) != -1) {
    bufferedOutputStream.write(temp,0,c);
}
bufferedOutputStream.close();
inputStream.close();

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Я нашел правильное решение. Причина в том, что файл является файлом gzip. Для загрузки необходимо использовать следующий код.

val openConnection = URL(url).openConnection()
//if the image file is gzip
val bytes = if (openConnection.contentEncoding == "gzip") {
    GZIPInputStream(openConnection.getInputStream()).readBytes()
} else {
    openConnection.getInputStream().readBytes()
}
val file = File("e:\\text.jpg")
file.writeBytes(bytes)
0 голосов
/ 13 февраля 2020

Похоже, что ответ на этот вопрос здесь: Kotlin: Как сохранить изображение из Inte rnet во внутреннее хранилище

Я думаю, вам нужно указать формат и тип сжатия как вы хотите сохранить изображение.

...