web-dev-qa-db-ja.com

HeicからJpeg / Jpgへの画像の変換

ユーザーが複数の画像をアップロードできるアプリケーションがあります。すべての画像はサーバーに保存され、iOSアプリケーションのWebビューに表示されます。

これで、iOS 10まではすべて問題なく機能していましたが、突然画像や画像が表示されないことがわかりました。少しデバッグしたところ、これが新しい画像形式Apple(HEIC)、

ネイティブUIImagePicker(1つの画像のみを選択)に戻してみましたが、画像はAppleとして表示されています。ユーザーが画像を選択したときに、画像をHEICからJPGに変換していると思いますが、これは複数の画像ピッカーを実装する必要があるため、サードパーティのライブラリを使用する場合は当てはまりません。

アプリを更新していないユーザーが問題に直面しないようにサーバー側で変換プロセスを作成するように努めていますが、アプリケーションで画像形式をローカルに変換できる方法があるかどうかも確認したいと思います。

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 または this website を直接使用することもできます

12
marshallino16

私はこのようにしました

     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!
     }
0
Niki

Swift 3では、既存のHEIF picの入力パスと、将来の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を返します。

0