无需解码即可快速读取 jpeg 的高度宽度和文件大小的方法
fast way to read height width and file size of jpeg without decoding
我有一个 jpeg 列表,我需要检查它们是否小于 4096 像素以及文件大小是否小于 4MB。我不需要显示图像,所以加载完整文件并对其进行解码有点矫枉过正。
是否可以os从元数据和文件大小中仅获取高度、宽度?
在 mac os 和 swift
文件大小可以通过FileManager API检查。
可以通过 CGImageSource 函数 (ImageIO.framework) 检查图像的宽度和高度,而无需将图像加载到内存中:
do {
let attribute = try FileManager.default.attributesOfItem(atPath: filePath)
// Filesize
let fileSize = attribute[FileAttributeKey.size] as! Int
// Width & Height
let imageFileUrl = URL(fileURLWithPath: filePath)
if let imageSource = CGImageSourceCreateWithURL(imageFileUrl as CFURL, nil) {
if let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as Dictionary? {
let width = imageProperties[kCGImagePropertyPixelWidth] as! Int
let height = imageProperties[kCGImagePropertyPixelHeight] as! Int
if (height > 4096 || width > 4096 || height < 256 || width < 256) {
print("Size not valid")
} else {
print("Size is valid")
}
}
}
} catch {
print("File attributes cannot be read")
}
方法是扫描图像的 SOFx 标记。 SOF市场包含图像大小。
提供标记结构的众多来源之一:
我有一个 jpeg 列表,我需要检查它们是否小于 4096 像素以及文件大小是否小于 4MB。我不需要显示图像,所以加载完整文件并对其进行解码有点矫枉过正。
是否可以os从元数据和文件大小中仅获取高度、宽度?
在 mac os 和 swift
文件大小可以通过FileManager API检查。
可以通过 CGImageSource 函数 (ImageIO.framework) 检查图像的宽度和高度,而无需将图像加载到内存中:
do {
let attribute = try FileManager.default.attributesOfItem(atPath: filePath)
// Filesize
let fileSize = attribute[FileAttributeKey.size] as! Int
// Width & Height
let imageFileUrl = URL(fileURLWithPath: filePath)
if let imageSource = CGImageSourceCreateWithURL(imageFileUrl as CFURL, nil) {
if let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as Dictionary? {
let width = imageProperties[kCGImagePropertyPixelWidth] as! Int
let height = imageProperties[kCGImagePropertyPixelHeight] as! Int
if (height > 4096 || width > 4096 || height < 256 || width < 256) {
print("Size not valid")
} else {
print("Size is valid")
}
}
}
} catch {
print("File attributes cannot be read")
}
方法是扫描图像的 SOFx 标记。 SOF市场包含图像大小。
提供标记结构的众多来源之一: