You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何从URL获取图片宽高且无需下载图片?

获取远程图片宽高(无需完整下载)

核心思路

通过HTTP Range 请求仅获取图片文件的前几百字节(包含宽高元数据的部分),然后根据图片格式解析出宽高信息,避免下载完整文件。

具体实现(Python 示例)

以下代码支持JPG、PNG格式的图片解析,仅请求文件前1024字节:

import requests
from io import BytesIO

def get_image_dimensions(url):
    try:
        # 发送Range请求,仅获取前1024字节
        headers = {'Range': 'bytes=0-1023'}
        response = requests.get(url, headers=headers)
        response.raise_for_status()

        # 处理PNG格式
        if response.content.startswith(b'\x89PNG'):
            # PNG的宽高在文件第16-23字节
            width = int.from_bytes(response.content[16:20], byteorder='big')
            height = int.from_bytes(response.content[20:24], byteorder='big')
            return (width, height)
        
        # 处理JPG格式
        elif response.content.startswith(b'\xff\xd8'):
            data = response.content
            offset = 2
            while offset < len(data):
                if data[offset] != 0xff:
                    break
                marker = data[offset+1]
                # 跳过非SOF(Start of Frame)标记
                if 0xc0 <= marker <= 0xc3 or 0xc5 <= marker <= 0xc7 or 0xc9 <= marker <= 0xcb or 0xcd <= marker <= 0xcf:
                    # SOF标记后包含宽高信息
                    height = int.from_bytes(data[offset+5:offset+7], byteorder='big')
                    width = int.from_bytes(data[offset+7:offset+9], byteorder='big')
                    return (width, height)
                # 计算当前标记块的长度,跳转到下一个标记
                length = int.from_bytes(data[offset+2:offset+4], byteorder='big')
                offset += length + 2
            return None
        
        else:
            # 不支持的格式
            return None
    except Exception as e:
        print(f"错误: {e}")
        return None

# 使用示例
url = "https://example.com/image.jpg"
dimensions = get_image_dimensions(url)
if dimensions:
    print(f"图片宽高: {dimensions[0]}x{dimensions[1]}")
else:
    print("无法获取图片宽高")

注意事项

  • 部分服务器不支持Range请求,若遇到这种情况,请求会返回完整文件,可通过检查响应头Content-Range判断是否成功获取部分数据。
  • 不同图片格式的元数据位置不同,上述代码仅覆盖常见的JPG、PNG,如需支持WebP等其他格式,需添加对应解析逻辑。
  • 若在前端场景使用,需确保目标API URL允许跨域请求;后端场景需确认请求权限无限制。

内容的提问来源于stack exchange,提问作者Pravin Fofariya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:40:25