我需要从一个URL加载图像,并将它们存储在本地,这样它们就不必反复重新加载。我有一个扩展我正在工作:
extension UIImage { func load(image imageName: String) -> UIImage { // declare image location let imagePath: String = "\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])/\(imageName).png" let imageUrl: URL = URL(fileURLWithPath: imagePath) // check if the image is stored already if FileManager.default.fileExists(atPath: imagePath), let imageData: Data = try? Data(contentsOf: imageUrl), let image: UIImage = UIImage(data: imageData, scale: UIScreen.main.scale) { return image } // image has not been created yet: create it, store it, return it do { let url = URL(string: eventInfo!.bannerImage)! let data = try Data(contentsOf: url) let loadedImage: UIImage = UIImage(data: data)! } catch{ print(error) } let newImage: UIImage = try? UIImagePNGRepresentation(loadedImage)?.write(to: imageUrl) return newImage } }
我遇到了一个问题,UIImagePNGRepresentation中的“loadedImage”返回时出现错误“use of unresolved identifier loadedImage”。我的目标是在本地存储图像的PNG表示。对此错误的任何建议将不胜感激。
这是一个简单的可变范围的问题。您在do
块内部声明loadedimage
,但然后尝试在该块外部(之后)使用。
将loadedimage
的使用移到do
块内。
您还需要更好的错误处理和可选结果的更好处理。而load
方法可能应该返回一个可选的图像,以防所有获取图像的尝试失败。或者返回某个默认图像。
下面是使用更好的API和更好地处理选项和错误重写的方法。
extension UIImage {
func load(image imageName: String) -> UIImage? {
// declare image location
guard let imageUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent(imageName).appendingPathExtension("png") else {
return nil // or create and return some default image
}
// check if the image is stored already
if FileManager.default.fileExists(atPath: imageUrl.path) {
if let imageData = try? Data(contentsOf: imageUrl), let image = UIImage(data: imageData) {
return image
}
}
// image has not been created yet: create it, store it, return it
do {
let url = URL(string: eventInfo!.bannerImage)! // two force-unwraps - consider better handling of this
if let data = try Data(contentsOf: url), let loadedImage = UIImage(data: data) {
try data.write(to: imageUrl)
return loadedImage
}
}
catch{
print(error)
}
return nil // or create and return some default image
}
}
如果eventinfo!.bannerimage
是一个远程URL,则绝不能在主队列上运行此代码。
我的问题是:当我使用活动存储时,如何从URL上传图像。我在Stackoverflow中使用了来自其他帖子的代码,但传递了model方法,即我需要存储在表中的param。奇怪的是,我收到了下一个错误: 但是当我从这个模型重新加载show视图时,图像显示为存储并部署在我的posts视图中。 在这里我的代码后模型: 这是我在控制器的编辑操作中的代码: 我得到了以下链接,其中谈到了从URL上传图像的机会,
我想从桶S3下载一个图像并存储在变量中,而不是在我的本地电脑中,我怎么做? 我使用此代码存储在本地:
问题内容: 我想从我的应用程序中的URL加载图像,因此我首先尝试使用Objective-C,但是它可以正常工作,但是对于Swift,我遇到了编译错误: ‘imageWithData’不可用:使用对象构造’UIImage(data :)’ 我的功能: 在Objective-C中: 有人可以解释一下为什么Swift无法使用它,以及如何解决该问题。 问题答案: Xcode 8或更高版本•Swift 3或
问题内容: 我在eclipse的java项目中具有这样的结构: src / com / myprogram /…/ foo.java res / icon.png 。项目 … 我知道您可以使用以下方式从罐子中加载图像 当您尝试直接使用eclipse运行应用程序时会出现问题,因为(我想)res文件夹不在src文件夹中,则会显示 。我想为源代码和资源提供单独的文件夹。 另外,我发现我可以将文件夹添加到
问题内容: 问题描述: 我正在创建一个滚动的带有缩略图的文章列表,该列表由我的SQLite数据库填充。通常,它运行缓慢,但速度较慢: 图像加载非常缓慢…我想使用“ 通用图像加载器 ”将图像缓存在设备上,如果您已经查看过图像(或者至少接近该图像,那会使它们看起来只是滚动到视图中) )。但是- 当您向上/向下拖动时,没有任何图像,然后在3-5秒后,图像开始弹出(就像重新下载它们一样) 我正在动态更改缩