HEIC / HEIF 图片转 JPG 图片

2,736 阅读1分钟

前段时间在工作中接到反馈,一些用户会上传格式为 HEIC 的图片,造成运营人员无法在非 Apple 设备上查看图片的问题。

原因在于从 iOS 11 起,iPhone 7 及之后出产的设备,系统采用了新的格式来存储视频和图片。

因此,我们需要将 HEIC 格式的图片转换为非 Apple 设备上可以查看的格式(包括但不限于 JPG)。

识别 HEIC

首先,需要将 HEIC 格式的图片识别出来。

借助 Apple 提供的 Photos 框架中的方法,可以完成对 HEIC 图片的识别。

import Photos

var isHEIC = false
let resources = PHAssetResource.assetResources(for: asset)
for resource in resources {
    let uti = resource.uniformTypeIdentifier
    if uti == "public.heic" || uti == "public.heif" {
        isHEIC = true
        break
    }
}

注意:我们需要获取到图片的 Asset 信息,才能判断图片是否为 HEIC 格式。

转换

依然使用 Photos 框架中的方法,完成对 HEIC 图片的转换。

import Photos

PHImageManager.default().requestImageData(for: asset, options: nil) { (imageData, dataUTI, orientation, info) in
    if isHEIC {  // 如果是 HEIC 图片
        guard let imageData = imageData,
            let ciImage = CIImage(data: imageData),
            let colorSpace = ciImage.colorSpace else { return }
        let context = CIContext()
        guard let jpgData = context.jpegRepresentation(of: ciImage, colorSpace: colorSpace, options: [:]),
            let jpgImage = UIImage(data: jpgData) else { return }
            // 将原图片替换为 jpgImage
    } else {  // 如果不是 HEIC 图片
        // 继续使用原图片
    }
}

依照以上方法,我们就可以识别 HEIC 图片,并将 HEIC 图片转换为 JPG 格式。