来自网址的半图显示

时间:2012-12-04 05:27:23

标签: iphone objective-c ios xcode ipad

enter image description here

您好,

我从url异步加载图片,问题是图片只加载一半我不知道为什么会发生这种情况,经过一些网上搜索我得到两个三个原因,

1可能因为严重的问题而发生。

2它可能因为图像形成而发生(但它发生在合成器(png& jpg)中,所以我认为这不是问题)。

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

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

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

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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 
}

不要忘记接受答案。