2017-01-13 3 views
0

С HTTP-заголовком Range клиенты могут запрашивать только определенный диапазон байтов с сервера.Загрузить только часть JPG с запросом HTTP

GET myfile.jpg HTTP/1.1 
"http://myhost" 
Range=bytes=1000-1200 

Если сервер поддерживает эту функцию отклика и, возможно, даже показывает, что с помощью Accept-Range заголовка, выше запрос будет возвращать только 200 байт из байта 1000 года.

Можно ли использовать этот метод для использования с JPG-изображением? Скажем, что фактические размеры JPG 800x1197 пикселей. Что нужно сделать, чтобы запросить только суб изображение между пикселями 200x200 и 400x400?

Мне кажется, что это возможно только для получения разрезанных по горизонтали срезов изображения. Но это уже было бы лучше, чем получение полного файла изображения. Поэтому в приведенном выше примере я бы сказал, что можно попытаться загрузить: срез от 200 (по оси Y) до 400 (по оси Y), а затем обрезать результат на стороне клиента соответственно.

Предположим, что мы уже знаем длины содержимого файла, а также его фактический размер изображения, что может быть определена путем запроса предыдущего HTTP:

длины содержимого в байтах: 88073 Размер JPG: 800x1197

Какой диапазон байтов я должен был запросить для этого изображения? Я предполагаю, что JPG содержит некоторые метаданные, которые также должны учитываться. Или сжатие jpg делает эту попытку невозможной? Было бы хорошо, если окончательный вырез не содержит метаданных от оригинала.

Но все же может потребоваться первоначальный запрос, который берет несколько байтов с самого начала, надеясь получить метаданные. и на основании этого может быть определен фактический диапазон байтов.

Было бы очень приятно, если бы кто-нибудь мог дать мне подсказку, как подойти к этому.

ответ

0

JPEG кодирует сжатые данные в одном или нескольких сканированиях. Сканирование не указывает их длину. Вы должны фактически декодировать, чтобы добраться до конца сканирования. Сканирование охватывает все изображение.

Если поток JPEG постепенно кодируется, вы можете одновременно считывать потоковые блоки, декодировать сканирование, обновлять выводимое изображение и получать последовательно уточненные изображения.

+0

Хорошо, я вижу. Это очень ясно. Я пришел к выводу, что невозможно с тем, что я пытался с JPG. С PNG я думаю, что это сработает, но JPEG работает, как вы его описываете. –