图像加载表单重定向URL的大小错误

时间:2014-06-30 09:12:01

标签: ios image swift retina-display sdwebimage

我正在使用SDWebImage从Web加载和映像并将其设置为地图上的标记。图像的URL可能会随时间而变化。因此我使用了一个保持稳定并指向原始网址的网址重定向。不幸的是,通过重定向加载时图像有问题。从重定向URL加载时,图像的大小始终是它应该的大小。从原始URL加载时正确绘制。

我添加了一个记录输出,用于输出图像大小。从重定向URL加载的图像的输出是88x88,而来自原始URL的图像的输出是44x44。图像的大小为88x88像素。我正在使用带有视网膜显示器的模拟器,因此我认为正确的尺寸应为44x44点。重定向URL肯定会重定向到正确的图像,我在浏览器中检查了它。同一图像的尺寸如何不同?

我的代码:

let url=NSURL(string:"http://redirectionurl/asdf")
//  let url=NSURL(string:"http://originalurl.com/image@2x.png")


var managerCompletedBlock:(UIImage!, NSError!,SDImageCacheType,Bool) -> Void = {
            image,error,cacheType,finished in
            if(finished){
                println("finished")
                if let e = error
                {
                    if let s = e.localizedDescription
                    {
                        println(s)
                    }
                }
                log.debug("size: \(image.size.width) \(image.size.height)")
                imageToLoad.icon = image
            } else {
                println("fail!!!!");
            }
        }

self.imageManager.downloadWithURL(url, options: SDWebImageOptions.HighPriority, progress: nil, completed: managerCompletedBlock)

我做了一个截图。左侧的标记从原始网址加载,右侧的标记从重定向网址加载:http://bayimg.com/JAOPmaAFp

1 个答案:

答案 0 :(得分:2)

SDWebImage在SDWebImageCompat.m中的SDScaledImageForKey方法中包含以下代码:

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        CGFloat scale = 1.0;
        if (key.length >= 8) {
            // Search @2x. at the end of the string, before a 3 to 4 extension length (only if key len is 8 or more @2x. + 4 len ext)
            NSRange range = [key rangeOfString:@"@2x." options:0 range:NSMakeRange(key.length - 8, 5)];
            if (range.location != NSNotFound) {
                scale = 2.0;
            }
        }

        UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];
        image = scaledImage;
    }

您会注意到它已检测到标准" @ 2x"在文件名中,并适当缩放图像。看起来它检查@ 2x的密钥默认情况下只是在传输重定向之前由传入的URL设置。

如果您现在有效,我可能只是更改您的重定向网址,以#34; @ 2x.png"结尾。或者,从快速浏览一下,看起来你可以"劫持"通过提供自己的cacheKeyFilter来获取URL缓存密钥(请查看自述文件以获取更多信息。)它可能不是出于此目的,但我猜测您是否提供了一个缓存密钥过滤器添加" @ 2x.png"最后,这可能确保一致的缩放行为。