Создание миниатюр - одна из самых распространенных задач в мобильной разработке. Но не все методы одинаково эффективны. Рассмотрим, как разные подходы показывают себя на практике при работе с 12-мегапиксельным JPEG.
Классические методы показывают разную производительность:
🔹 NSImage на macOS: 710 мс.
🔹 UIGraphicsImageRenderer на iOS: 210 мс.
🔹 UIImage.prepareThumbnail() на iOS: 130 мс.
Специализированные методы демонстрируют лучшие результаты:
🔹 CGImageSource на macOS: 16-26 мс.
🔹 CGImageSource на iOS: 24-95 мс в зависимости от формата.
Пример использования CGImageSource:
let source = CGImageSourceCreateWithData(imageData as CFData, nil)!
let cgThumb = CGImageSourceCreateThumbnailAtIndex(source, 0, [
kCGImageSourceCreateThumbnailFromImageAlways: true,
kCGImageSourceCreateThumbnailWithTransform: true,
kCGImageSourceThumbnailMaxPixelSize: max(size.width, size.height)
] as CFDictionary)!
let thumbnail = UIImage(cgImage: cgThumb) // или NSImage в macOS
Ключевые параметры:
🔹 kCGImageSourceCreateThumbnailFromImageAlways: гарантирует создание миниатюры.
🔹 kCGImageSourceCreateThumbnailWithTransform: учитывает ориентацию изображения.
🔹 kCGImageSourceThumbnailMaxPixelSize: задает максимальный размер.
Получение информации о размерах:
let source = CGImageSourceCreateWithData(data as CFData, nil)!
if let properties = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) as? [CFString: Any],
let width = properties[kCGImagePropertyPixelWidth] as? Int,
let height = properties[kCGImagePropertyPixelHeight] as? Int {
print("Ширина: \(width), высота: \(height)")
}
Преимущества CGImageSource:
🔹 Мгновенное получение размеров изображения (2-4 мс).
🔹 Работа с различными форматами (HEIC, JPEG, PNG).
🔹 Эффективное использование памяти.
🔹 Поддержка последовательной загрузки.
🔗 Ссылка на подробную статью
💡 Вывод:
CGImageSource показывает стабильно высокую производительность на обеих платформах, особенно заметно ускорение на macOS: до 40 раз по сравнению с классическими методами. Для задач, связанных с отображением галерей или списков изображений, этот подход становится оптимальным выбором.
➡️ Подписаться на канал
Мобильный трудоголик