对于具有专业知识的专家来说,这是一个问题。
可以成功地与PNG
共享高质量无损UIActivityViewController
图像到许多共享平台,但Facebook Messenger每次都失败。提供的错误是“Couldn’t Load Content”
。
Facebook Messenger中UIImagePNGRepresentation
NSData
和AnyObject
都失败,UIImage
但成功分享但输出的图片似乎是JPG,质量低,有损耗。
问题:
这里发生了什么以及如何纠正 - 如何才能成功地将UIActivityViewController
的高质量无损PNG图像分享到Facebook Messenger?
这是Facebook Messenger,Xcode或UIActivityViewController
的问题或限制吗?
NSData
和AnyObject
(以及UIImage
)是否有其他选择?
代码:
var myImage: UIImage!
var myImagePNG: NSData!
//var myImagePNG: AnyObject!
func sharePNG() { …
myImagePNG = UIImagePNGRepresentation(myImage)!
let activity = UIActivityViewController(activityItems: [myImagePNG], applicationActivities: nil)
self.presentViewController(activity, animated: true, completion: nil)
}
图片:
答案 0 :(得分:0)
使用UIGraphicsBeginImageContextWithOptions()
答案 1 :(得分:0)
更好地控制从UIActivityController共享的内容的最佳方法不仅是将其编码为数据,然后将数据写入临时URL,然后将URL传递给UIActivityController。这样,您就可以控制要共享的文件的标题,如果他们选择将文件保存或将其空投到某个位置,则这很重要。如果仅共享数据,最终将得到一些真正随机的文件名。这适用于通过Facebook Messenger发送PNG:
enum ImageProcessingError: Error {
case couldNotCreatePNGData
}
private func exportImageAsPNG(_ image: UIImage, filename: String) throws {
guard let pngData = image.pngData() else { throw ImageProcessingError.couldNotCreatePNGData }
let temporaryURL = FileManager.default.temporaryDirectory
.appendingPathComponent(filename)
.appendingPathExtension("png")
try pngData.write(to: temporaryURL, options: [])
// present UIActivityViewController with the temporaryURL
}