下載的圖像放在文檔庫上。您無法使用[UIImage imageNamed:@"filename"]
獲取圖像,因爲這些功能只能從包中獲取圖像。我這裏是如何從文檔庫中獲得的圖像:
NSString *bundlePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", bundlePath, fileName]];
縮放非視網膜成像,以獲得視網膜的大小是不好的做法。我的建議是,你下載的圖像應該是視網膜大小。從中生成非視網膜圖像並將其保存在文檔庫中。
這是示例如何縮放視網膜圖像並將其保存在文檔庫上。要獲得非視網膜大小,您可以手動縮放並保存。這裏的示例代碼:
UIImage *image = [UIImage imageNamed:@"[email protected]"];
// set non-retina size from current image
CGSize size = CGSizeMake(image.size.width/2., image.size.height/2.);
/** scale the image */
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, size.width, size.height), image.CGImage);
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
/** save scaled image */
NSString *basePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
// save with same name but without suffix "@2x"
NSString *filePath = [NSString stringWithFormat:@"%@/%@", basePath, @"nonRetinaImage"];
@try {
[UIImagePNGRepresentation(scaledImage) writeToFile:filePath options:NSAtomicWrite error:nil];
} @catch (NSException *exception) {
NSLog(@"error while saving non-retina image with exception %@", exception);
}
來源
2014-02-19 04:53:34
nvl
謝謝諾瓦爾,但如果你要縮放視網膜到非視網膜,那麼你將不會得到像視網膜圖像中出現的質量。像100X100在視網膜中顯示爲50X50。我猜這不是縮小的,它是使用某種壓縮技術的?上面的代碼正在做的是縮小它,我想這會降低質量。我在上面提供的代碼中使用了 –
。我得到名爲'yourRetinaImage @ 2x.png'的圖片。我將圖像大小調整爲一半,並用不同的名稱'nonRetinaImage'保存 – nvl