首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从url创建时,UIImage被旋转90度,并设置为pasteboard。

从url创建时,UIImage被旋转90度,并设置为pasteboard。
EN

Stack Overflow用户
提问于 2022-02-12 15:46:50
回答 1查看 66关注 0票数 0

我该怎么做呢?

代码语言:javascript
复制
let pasteboard = UIPasteboard.general
let base64EncodedImageString = "here_base_64_string_image"
let data = Data(base64Encoded: base64EncodedImageString)
let url = data?.write(withName: "image.jpeg")
pasteboard.image = UIImage(url: url) //and now when I try to paste somewhere that image for example in imessage, it is rotated... why?

可能重要的是:

如果使用完全相同的进程(!),则只对camera.

  • However,创建的图像发生
  1. (!)要为UIActivityViewController创建UIActivityViewController并尝试使用iMessage应用程序,那么它可以工作.为什么?有什么不同?

我对UIImageData使用了上面两个简单的扩展

代码语言:javascript
复制
extension Data {
    func write(withName name: String) -> URL {
        let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(name)
        do {
            try write(to: url, options: NSData.WritingOptions.atomic)
            return url
        } catch {
            return url
        }
    }
}

extension UIImage {
    convenience init?(url: URL?) {
        guard let url = url else {
            return nil
        }
        do {
            self.init(data: try Data(contentsOf: url))
        } catch {
            return nil
        }
    }
}

在服务器返回base64EncodedString之前,我会从摄像机上传一个图像,如下所示:

代码语言:javascript
复制
func imagePickerController(
    _ picker: UIImagePickerController,
    didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]
) {
    let image = info[.originalImage] as? UIImage
    let encodedBase64 = image?.jpegData(compressionQuality: 0.9)?.base64EncodedString() ?? ""
    //upload encodedBase64 to the server... that is all
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-12 17:19:33

我不确定,但我认为UIPasteBoard将您的形象转换为巴布亚新几内亚,并放弃它的方向。您可以显式地告诉您添加到黑板上的数据类型,但我不确定这是否适用于您的风景。

代码语言:javascript
复制
extension Data {
    var image: UIImage? { UIImage(data: self) }
}

设置您的纸板数据

代码语言:javascript
复制
UIPasteboard.general.setData(jpegData, forPasteboardType: "public.jpeg")

从纸板加载数据

代码语言:javascript
复制
if let pbImage = UIPasteboard.general.data(forPasteboardType: "public.jpeg")?.image {

}

或在设置pasteboard图像属性之前重新绘制图像。

代码语言:javascript
复制
extension UIImage {
    func flattened(isOpaque: Bool = true) -> UIImage? {
        if imageOrientation == .up { return self }
        UIGraphicsBeginImageContextWithOptions(size, isOpaque, scale)
        defer { UIGraphicsEndImageContext() }
        draw(in: CGRect(origin: .zero, size: size))
        return UIGraphicsGetImageFromCurrentImageContext()
    }
}

代码语言:javascript
复制
UIPasteboard.general.image = image.flattened()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71093359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档