Скажем, у меня есть CGImage
, который был загружен из некоторого URL
, и я хочу извлечь его свойства через CGImageSourceCopyPropertiesAtIndex
:
// Playground
import SwiftUI
func printPropertiesOf(_ image: CGImage) {
guard let dataProvider = image.dataProvider else {
print("Couldn't get the data provider.")
return
}
guard let data = dataProvider.data else {
print("Couldn't get the data.")
return
}
guard let source = CGImageSourceCreateWithData(data, nil) else {
print("Couldn't get the source.")
return
}
guard let properties = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) else {
print("Couldn't get the properties.")
return
}
print(properties)
}
let url = Bundle.main.url(forResource: "Landscape/Landscape_0", withExtension: "jpg")!
let source = CGImageSourceCreateWithURL(url as CFURL, nil)!
let cgImage = CGImageSourceCreateImageAtIndex(source, 0, nil)!
printPropertiesOf(cgImage)
Вывод:
Не удалось получить свойства.
Но если я использую URL
, где находится изображение, вместо CGImage
:
// Playground
import SwiftUI
func printPropertiesOfImageIn(_ url: URL) {
guard let data = try? Data(contentsOf: url) else {
print("Couldn't get the data.")
return
}
guard let source = CGImageSourceCreateWithData(data as CFData, nil) else {
print("Couldn't get the source.")
return
}
guard let properties = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) else {
print("Couldn't get the properties.")
return
}
print(properties)
}
let url = Bundle.main.url(forResource: "Landscape/Landscape_0", withExtension: "jpg")!
let source = CGImageSourceCreateWithURL(url as CFURL, nil)!
let cgImage = CGImageSourceCreateImageAtIndex(source, 0, nil)!
printPropertiesOfImageIn(url)
Вывод:
{
ColorModel = RGB;
DPIHeight = 72;
DPIWidth = 72;
Depth = 8;
PixelHeight = 1200;
PixelWidth = 1800;
"{JFIF}" = {
DensityUnit = 1;
JFIFVersion = (
1,
0,
1
);
XDensity = 72;
YDensity = 72;
};
"{TIFF}" = {
Orientation = 0;
ResolutionUnit = 2;
XResolution = 72;
YResolution = 72;
};
}
Есть ли способ извлечь метаданные из самого CGImage
, не полагаясь на его источник URL?
Если нет, есть ли способ узнать источник URL
данного CGImage
?
(Примечание: изображение, использованное в приведенных выше примерах можно найти здесь .)