やりたいこと
UIImageをgif画像をData型に変換すること
UIImage.jpegData(compressionQuality:)やUIImage.pngData()と同様の事を
gif画像でも実現したいです
前提条件
gif画像はShareExtensionによって他アプリ(デフォルトアプリのPhotos)から
受け渡されたgifアニメーションデータになります。
現状のソース (不必要箇所は省略)
Swift(viewDidLoad)
1override func viewDidLoad() { 2 // 共有アイテムリストを取得 3 guard let inputItem = extensionContext?.inputItems.first as? NSExtensionItem else { return } 4 5 // 受け取りデータの処理 6 DispatchQueue.global().async { 7 for attatchment in inputItem.attachments ?? [] { 8 for identifier in attatchment.registeredTypeIdentifiers { 9 attatchment.loadItem(forTypeIdentifier: identifier) { [weak self] (coding, error) in 10 guard let item = coding else { return } 11 12 // 画像タイプごとの処理 (コールバックは省略) 13 switch identifier as CFString { 14 case kUTTypeJPEG: // jpg 15 self?. changeAttachmentToData(attatchment: attatchment, type: "jpg") 16 case kUTTypePNG: // png 17 self?. changeAttachmentToData(attatchment: attatchment, type: "png") 18 case kUTTypeGIF: // gif 19 self?. changeAttachmentToData(attatchment: attatchment, type: "gif") 20 } 21 } 22 } 23 } 24 } 25 26 }
Swift(changeAttachmentToData)
1// 添付データをData型に変換する 2func changeAttachmentToData(attatchment: NSItemProvider, type:String, callback: @escaping (_ data:Data?, _ error:String?) -> Void ) { 3 4 attatchment.loadObject(ofClass: UIImage.self) { image, error in 5 // エラーの場合 6 if error != nil { 7 callback(nil, error?.localizedDescription) 8 return 9 } 10 11 // UIImageに変換する 12 guard let image = image as? UIImage else { 13 callback(nil, "UIImageへの変換に失敗") 14 return 15 } 16 17 // dataに変換 18 var data:Data? 19 if type == "jpg" { 20 data = image.jpegData(compressionQuality: 1) 21 } else if type == "png" { 22 data = image.pngData() 23 } else if type == "gif" { 24 // ここでgif画像をpngやjpg同様にData型に変換したいです 25 }else { 26 callback(nil, "対応していない画像です") 27 } 28 29 // データを返す 30 callback(data, nil) 31 } 32}
補足
①そもそもShareExtensionでデータを受け取る際に
kUTTypeGIFで識別した時点で別の処理が必要なのであればそれでも大丈夫です。
絶対にchangeAttachmentToDataのメソッド内で処理する必要はないです
②タイトルはUIImageからDataへの変換と書いていますが
そもそもUIImageを間に挟む必要もありません
ShareExtensionで受け取ったデータをUIImage経由せずにData型に変換できるのであれば
それがベストです
gif画像をUIImageで表示するような情報はたくさんあるのですが
gifのData型をつくり出す方法があまり見つからず、ご協力頂けましたら幸いです。
宜しくお願い致します。
あなたの回答
tips
プレビュー