0

在此处输入图像描述

你好,

我从 url 异步加载图像,问题是图像只加载了一半我不明白为什么会发生这种情况,在网上搜索后我得到了两个三个原因,

1它可能是由于服务器端问题而发生的。

2它可能是由于图像格式而发生的(但是对于格式(png和jpg)都发生了,所以这不是问题)。

3 这可能是因为图像尺寸太大(图像尺寸在 200kb 到 700kb 之间)

它也发生在浏览器中,但有时。

如果您对此问题有任何解决方案或建议,请重播。

4

2 回答 2

1

使用此代码..它可能对您有用

 NSString *htmlString = [NSString stringWithFormat:
                  @"<html>"
                  "<head>"
                  "<script type=\"text/javascript\" >"
                  "function display(img){"
                  "var imgOrigH = document.getElementById('image').offsetHeight;"
                  "var imgOrigW = document.getElementById('image').offsetWidth;"
                  "var bodyH = window.innerHeight;"
                  "var bodyW = window.innerWidth;"
                  "if((imgOrigW/imgOrigH) > (bodyW/bodyH))"
                  "{"
                  "document.getElementById('image').style.width = bodyW + 'px';"
                  "document.getElementById('image').style.top = (bodyH - document.getElementById('image').offsetHeight)/2  + 'px';"
                  "}"
                  "else"
                  "{"
                  "document.getElementById('image').style.height = bodyH + 'px';"
                  "document.getElementById('image').style.marginLeft = (bodyW - document.getElementById('image').offsetWidth)/2  + 'px';"
                  "}"
                  "}"
                  "</script>"
                  "</head>"
                  "<body style=\"margin:0;width:100%;height:100%;\" >"
                  "<img id=\"image\" src=\"%@\" onload=\"display()\" style=\"position:relative\" />"
                  "</body>"
                  "</html>",pass your url string here];
于 2012-12-04T06:29:51.700 回答
0

我也遇到过这类问题,基本上是异步线程无法完全下载图像时网络错误。解决方案是检查下载的图像是否有效。如果无效则重新下载。以下是我用来检查图像是否有效的方法:

注意:此检查仅适用于 PNG 图像,要检查 JPEG,只需在“if”条件下替换第一个和最后两个字节。

- (BOOL)isImageValid:(NSData *)data
{
    BOOL val = YES;

    if ([data length] < 4) 
        val = NO;

    const unsigned char * bytes = (const unsigned char *)[data bytes];

    if (bytes[0] != 0x89 || bytes[1] != 0x50) 
        val = NO;
    if (bytes[[data length] - 2] != 0x60 || 
        bytes[[data length] - 1] != 0x82) 
        val = NO;

    return val; //return YES if valid 
}

不要忘记接受答案。

于 2012-12-04T06:58:43.647 回答