相关疑难解决方法(0)

如何通过查看目标c中的标题来提取PNG的宽度和高度?

我需要在不下载图像的情况下在线查找图像的尺寸.为此,我这样做:

+ (CGSize) getImageDimensions:(NSString *)url {

   // Send a synchronous request
    NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString: url]];
    NSString *rangeString = [url hasSuffix: @"png"] ? @"bytes=0-100" : @"bytes=0-1300";
    [urlRequest setValue:rangeString forHTTPHeaderField:@"Range"];
    NSURLResponse * response = nil;
    NSError * error = nil;
    NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
                                          returningResponse:&response
                                                      error:&error];
    if (error == nil)
        return [UIImage imageWithData: data].size;
    else
        return CGSizeMake(0, 0);

}
Run Code Online (Sandbox Code Playgroud)

这(下载前100个字节)令人惊讶地工作,我通过这种方式获得了正确的PNG尺寸.

但是我不认为这是一种非常优雅的方法.首先,我选择通过猜测和检查来下载前100个字节,使其尽可能小,同时仍然可以正常工作.

显然在PNG文件中,这个东西在标题中称为IHDR,我必须在它的宽度和高度之后直接找到它.这让我觉得我应该遍历数据并找到这个IHDR并获得维度.问题是,当我NSLog数据时,我得到这样的东西:

... 49484452 000003b7 000001a7 08060000 006c2da0 b100000a 41694343 50494343 2050726f 66696c65 ...
Run Code Online (Sandbox Code Playgroud)

我不知道如何处理我的NSData对象的循环并检测IHDR令牌,然后将之后的内容转换为数字.我也不知道请求只有100个字节的PNG请求太多只是为了得到尺寸,或者它是否要求不够

binary header image-processing objective-c nsdata

10
推荐指数
1
解决办法
5799
查看次数

标签 统计

binary ×1

header ×1

image-processing ×1

nsdata ×1

objective-c ×1