Channel BW Swift - @bwswift - №2485
🖼️ Швидкий thumbnail через ImageIO: 3 прапорці, які реально важливіПараметри CGImageSourceCreateThumbnailAtIndex ніби задокументовані, але які саме комбінації працюють без болю — ні. Ось що виявилось “золотою трійкою”:- kCGImageSourceCreateThumbnailFromImageAlwaysФормально можна й без нього, але тоді ловиш дивні логи помилок для JPEG/HEIC, коли система очікує embedded thumbnail, а його нема. Варіант FromImageIfAbsent не завжди ці логи прибирає.- kCGImageSourceCreateThumbnailWithTransformMust-have, якщо хочеш, щоб thumbnail поважав EXIF orientation (особливо JPEG). Без нього частина фоток буде боком/догори ногами.- kCGImageSourceThumbnailMaxPixelSizeМаксимальна сторона thumbnail; на виході картинка буде ≤ цього розміру.
Результат: 12MP JPEG на macOS почав ресайзитись за ~26ms — це майже ×30 швидше за “наївний” підхід.І ще 2 неприємні реалії ImageIO:- API інколи ламається на різних файлах/версіях macOS → автору довелось зробити 4 різні реалізації ресайзера і фолбекати між ними.Інколи ImageIO кидає C++ exceptions. Якщо не ловити їх в Obj-C як @catch (...) (так, буквально три крапки), апка може впасти.- окремо від Brent Simmons: не юзайте CGImageSourceCreateImageAtIndex для indexed-color ICO (4-bit palette) — беріть CGImageSourceCreateThumbnailAtIndex, щоб обійти баг.BWSwift 📱 YouTube 📱 Patreon
908
26-04-24 11:01