Оба существующих ответа имеют хорошие рекомендации, но попытаться рассказать всю историю...
UIImage
не представляет собой файл изображения или даже двоичные данные в формате файла изображения. UIImage
лучше всего рассматривать как абстрактное представление отображаемого изображения, закодированного в этих данных, то есть UIImage
является результатом процесса декодирования. К тому времени, когда у вас есть объект UIImage
, уже неважно, из какого формата файла он был получен.
Итак, как отмечает @Ladislav answer, если у вас уже есть UIImage
и вы просто хотите получить данные в определенном файле изображения format вызовите одну из удобных функций для преобразования UIImage
в данные в формате файла. Как следует из названия, UIImageJPEGRepresentation
возвращает данные, подходящие для записи в файл JPEG.
Если у вас уже есть UIImage
, UIImageJPEGRepresentation
, вероятно, будет лучшим выбором, так как вы можете использовать его независимо от исходного формата изображения.
Как подразумевает @ScottCorscadden, если у вас нет UIImage
(пока), потому что вы работаете на более низком уровне, например что у вас есть доступ к исходным данным файла, вам нужно будет проверить эти данные, чтобы определить их формат, или запросить у любого источника, из которого вы получили данные, метаданные, описывающие его формат.
Если вы хотите проверить сами данные, вам лучше всего ознакомиться со стандартами формата HIEF. См. nokiatech, группа MPEG или википедия а>.
В формате контейнера HEIF и возможных типах носителей, которые могут храниться внутри, происходит много всего, поэтому решить, есть ли у вас не просто файл HEIF, а файл HEIF/HEVC, совместимый с тем или иным средством просмотра, может быть непросто. . Поскольку вы говорите об исключении вещей, которые ваш сервер не поддерживает, может быть проще кодировать с точки зрения включения только вещей которые ваш сервер поддерживает. То есть, если у вас есть данные без метаданных, найдите что-то вроде магического числа JPEG 0xffd8ff
и используйте его, чтобы исключить все, что не является JPEG.
Однако лучше поискать метаданные. Если вы выбираете изображения из библиотеки фотографий с помощью PHImageManager.
requestImageData(for:options:resultHandler:)
, Второй параметр обработчика результатов — это универсальный идентификатор типа. для данных изображения: для файлов HEIF и HEIC в дикой природе были обнаружены public.heif
, public.heif-standard
и public.heic
.
(Опять же, если вы ищете «изображения, которые мой сервер не поддерживает», вам лучше проверить форматы, которые ваш сервер поддерживает, и отклонить все, что не входит в этот список, а чем пытаться определить все возможные неподдерживаемые форматы.)
27.10.2017