【问题标题】:UIActivityViewController and UIImage previewUIActivityViewController 和 UIImage 预览
【发布时间】:2017-08-22 16:34:50
【问题描述】:

我正在尝试使用UIActivityViewController(在 iMessage、Telegram、WhatsApp 等)分享图像。

我在做:

let image = ... // an image
let activityViewController = UIActivityViewController(activityItems: [image], applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)

但是图像被裁剪得很糟糕。我还尝试使用UIActivityItemSource 在用户共享操作之前调整图像大小,但结果会根据用户设备和图像而变化

如何在所有设备和应用上实现完美预览?有什么建议或参考吗?

这里是最终结果的示例:

第一张图片是iMessage中以Sticker共享的图片,第二张使用UIActivityViewController分享的图片

【问题讨论】:

  • 你的意思是“图像被裁剪得很糟糕”?你的意思是当用户实际在另一个应用程序中检索图像时,它是错误的图像?如果是这样,您需要显示那个代码,而不是显示活动视图控制器的代码。
  • 代码是我发布的。您专注于调整大小,但这只是部分实现目标的实验
  • 究竟是什么问题?您已经表明它不是裁剪也不是压缩,但您确实没有详细说明问题。我一直使用 UIActivityController 共享图像,我没有任何问题。当我们无法复制任何问题时,我们中的任何人如何帮助您?
  • “你专注于调整大小,但这只是一个部分实现目标的实验”我没有专注于任何事情。我是说没有关注问题所在。您指的这个“预览”是什么?什么是“非常糟糕的”,在哪里?
  • 我添加了一个我获得的示例。使用UIActivityViewController 获得第二张图片,预览被裁剪,但是点击图片可以看到全分辨率图片

标签: ios swift uiimage uiactivityviewcontroller


【解决方案1】:

在使用 UIActivityViewController 之前尝试压缩图像

var compressedImage: Data? = UIImageJPEGRepresentation(yourImage, 0.8)
            var docsPath: String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as? String ?? ""
            var imagePath: String = URL(fileURLWithPath: docsPath).appendingPathComponent("image.jpg").absoluteString
            var imageUrl = URL.init(fileURLWithPath: imagePath)

            do {
                try compressedImage?.write(to: imageUrl, options: .atomic)
            } catch {
                print(error)
            }

            // save the file
            var activityViewController = UIActivityViewController(activityItems: ["Check this image", imageUrl], applicationActivities: nil)

【讨论】:

  • 这种方式试过了,不行:let data = UIImageJPEGRepresentation(self.image, 0.8)! let image = UIImage(data: data)! //let image = UIImage(data: data, scale: 1)! //let image = UIImage(data: data, scale: 3)! let activityViewController = UIActivityViewController(activityItems: [image], applicationActivities: nil) self.present(activityViewController, animated: true, completion: nil)
猜你喜欢
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多