使用UIActivityViewController与Facebook Messenger共享PNG图像始终失败

时间:2017-07-19 01:09:42

标签: ios swift xcode uiactivityviewcontroller messenger

对于具有专业知识的专家来说,这是一个问题。

可以成功地与PNG共享高质量无损UIActivityViewController图像到许多共享平台,但Facebook Messenger每次都失败。提供的错误是“Couldn’t Load Content”

Facebook Messenger中UIImagePNGRepresentation NSDataAnyObject都失败,UIImage但成功分享输出的图片似乎是JPG,质量低,有损耗。

问题:

这里发生了什么以及如何纠正 - 如何才能成功地将UIActivityViewController的高质量无损PNG图像分享到Facebook Messenger?

这是Facebook Messenger,Xcode或UIActivityViewController的问题或限制吗?

NSDataAnyObject(以及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)
}

图片:

enter image description here

2 个答案:

答案 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
    }