我有一个应用程序,用户可以上传多个图像,所有图像都将存储在服务器中,并将显示在我的iOS应用程序的Web视图中。
现在所有的东西都工作得很好,直到iOS 10,但突然我们开始看到一些图片/图像没有显示,经过一点调试我们发现这是由于苹果的新图像格式(HEIC)引起的问题),
我尝试改回Native UIImagePicker(只挑选一张图片)并且图像显示为Apple我猜想当用户选择时将图像从HEIC转换为JPG,但是当我使用时不是这种情况第三方库,因为我需要实现多个图像选择器。
虽然我们正在努力在服务器端进行转换过程以避免未更新应用程序的用户遇到麻烦,但我也想看看是否有任何方法可以在本地转换图像格式在我的申请中。
答案 0 :(得分:10)
在将HEIC照片上传到服务器之前,有一种解决方法可以将HEIC照片转换为JPEG:
NSData *jpgImageData = UIImageJPEGRepresentation(image, 0.7);
如果使用 PHAsset ,为了拥有图像对象,您需要从 PHImageManager 调用此方法:
- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *__nullable result, NSDictionary *__nullable info))resultHandler;
在服务器端,您还可以使用this API
答案 1 :(得分:2)
在Swift 3中,给定现有HEIF图片的输入路径和保存未来JPG文件的输出路径:
func fromHeicToJpg(heicPath: String, jpgPath: String) -> UIImage? {
let heicImage = UIImage(named:heicPath)
let jpgImageData = UIImageJPEGRepresentation(heicImage!, 1.0)
FileManager.default.createFile(atPath: jpgPath, contents: jpgImageData, attributes: nil)
let jpgImage = UIImage(named: jpgPath)
return jpgImage
}
它返回jpgPath的UIImage;如果出现问题,则返回null。
答案 2 :(得分:0)
我已经这样做了,
let newImageSize = Utility.getJpegData(imageData: imageData!, referenceUrl: referenceUrl!)
/**
- Convert heic image to jpeg format
*/
public static func getJpegData(imageData: Data, referenceUrl: NSURL) -> Data {
var newImageSize: Data?
if (try? Data(contentsOf: referenceUrl as URL)) != nil
{
let image: UIImage = UIImage(data: imageData)!
newImageSize = image.jpegData(compressionQuality: 1.0)
}
return newImageSize!
}