Как конвертировать фото в jpeg с heif?

Для конвертации фотографий из формата 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 для работы с изображениями.