Bar*_*rtu 15 iphone objective-c uiimageview uiimage ios
NSError *error = nil;
NSURL *url = [NSURL URLWithString:[imageLinks objectAtIndex:0]];
NSData *tdata = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];
if (error) {
NSLog(@"%@", [error localizedDescription]);
}else {
// no error, this one is being called within my app
NSLog(@"Data loaded successfully");
}
self.pictureView1.image = [UIImage imageWithData:tdata];
Run Code Online (Sandbox Code Playgroud)
我有一个jpeg文件,我可以确认URL内容是成功收集的,但是当我尝试将我的图像数据放入UIImage
我的应用程序失败时.我想知道是否有任何NSData检查确认它可用UIImage
.
我也不知道导致这种失败的原因,以及如何防止它.任何帮助,将不胜感激.
如果您正在处理单个小图像,您可以转换Data
为UIImage
:
if let _ = UIImage(data: data) {
print("data contains image data")
} else {
print("data does not contain image data")
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您要处理大量图像或高清图像,则可以使用所有文件中的名称The magic bytes
,即表示文件签名的前几个字节。
基本上你只需要提取几个字节而不是分配整个图像。
这是Data
使用此技术的扩展:
import Foundation
extension Data {
var isImageData: Bool {
let array = self.withUnsafeBytes {
[UInt8](UnsafeBufferPointer(start: $0, count: 10))
}
let intervals: [[UInt8]] = [
[0x42, 0x4D], // bmp
[0xFF, 0xD8, 0xFF], // jpg
[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A], // png
[0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20], // jpeg2000
[0x49, 0x49, 0x2A, 0x00], // tiff1
[0x4D, 0x4D, 0x00, 0x2A] // tiff2
]
for interval in intervals {
var image = true
for i in 0..<interval.count {
if array[i] != interval[i] {
image = false
break
}
}
if image { return true }
}
return false
}
}
Run Code Online (Sandbox Code Playgroud)
您可以添加更多图像或想象基于该代码和文件类型的任何文件类型识别(例如,请参阅维基百科文件签名列表)。
归档时间: |
|
查看次数: |
14500 次 |
最近记录: |