Для конвертации фотографий из формата HEIF (High Efficiency Image Format) в формат JPEG (Joint Photographic Experts Group) на платформе iOS вам понадобится использовать API и инструменты, доступные в фреймворке ImageIO.
Первым шагом вам необходимо получить ссылку на фотографию, которую вы хотите конвертировать. Это может быть ссылка на фотографию в галерее устройства, ссылка на фотографию, полученную изображением UIImagePickerController или загруженное изображение с сервера, например.
Однако, прежде чем приступить к кодированию, вам нужно проверить, находится ли изображение в формате HEIF. Для этого вы можете использовать функцию UTTypeConformsTo
из MobileCoreServices
для проверки типа источника изображения.
import MobileCoreServices func isHEIF(sourceURL: URL) -> Bool { if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, sourceURL.pathExtension as CFString, nil)?.takeRetainedValue() { return UTTypeConformsTo(uti, kUTTypeImage) } return false }
После того, как вы убедитесь, что фотография на самом деле имеет формат HEIF, вы можете приступить к конвертации. Вам понадобится создать CGImageSource
из исходного изображения и указать определенные параметры для сохранения конечного изображения в формате JPEG.
import ImageIO func convertHEIFtoJPEG(sourceURL: URL, destinationURL: URL) { guard let imageSource = CGImageSourceCreateWithURL(sourceURL as CFURL, nil) else { // Обработка ошибки, если не удалось создать CGImageSource из исходного файла return } if let destination = CGImageDestinationCreateWithURL(destinationURL as CFURL, kUTTypeJPEG, 1, nil) { let finalOptions: [NSString: Any] = [ kCGImageSourceCreateThumbnailFromImageAlways: true, kCGImageSourceThumbnailMaxPixelSize: 1080 ] CGImageDestinationAddImageFromSource(destination, imageSource, 0, finalOptions as CFDictionary) CGImageDestinationFinalize(destination) } else { // Обработка ошибки, если не удалось создать CGImageDestination для сохранения файла return } }
Вышеуказанный код создает CGImageSource
из исходного изображения и CGImageDestination
для сохранения конечного изображения. Затем происходит добавление исходного изображения в CGImageDestination
, указывая опции, такие как создание миниатюры (если это необходимо) и максимальное разрешение. Наконец, вызывается CGImageDestinationFinalize
, чтобы сохранить конечное изображение в формате JPEG.
Например, вы можете вызвать функцию convertHEIFtoJPEG(sourceURL:destinationURL:)
следующим образом:
let sourceURL = URL(fileURLWithPath: "path/to/source/image.HEIC") let destinationURL = URL(fileURLWithPath: "path/to/destination/image.jpg") if isHEIF(sourceURL: sourceURL) { convertHEIFtoJPEG(sourceURL: sourceURL, destinationURL: destinationURL) } else { // Обработка ошибки, если изображение не является форматом HEIF }
Здесь вы проверяете, является ли фотография форматом HEIF при помощи функции isHEIF
, а затем вызываете функцию convertHEIFtoJPEG
, передавая исходный и конечный URL.
Пожалуйста, обратите внимание, что данный код разработан на языке программирования Swift и требует фреймворка ImageIO для работы с изображениями.