当前位置: 首页 > 面试题库 >

Swift PNG图片保存方向错误

徐知
2023-03-14
问题内容

如果在保存之前使用图像,那是正常的。但是,如果我保存并以后使用,则需要旋转90度。我如何确保它不会横向保存?

func saveEvent(_ center1: CLLocation, title2: String, imagePicked1: UIImage)
    {
        let data = UIImagePNGRepresentation(imagePicked1);///
        let url = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(NSUUID().uuidString+".dat")
        do {
            try data!.write(to: url!, options: [])
        } catch let e as NSError {
            print("Error! \(e)");
            return
        }
        let image11 = CKAsset(fileURL: url!)

        self.eventRecord.setObject(image11 as CKAsset, forKey: "Picture")
        let publicData = CKContainer.default().publicCloudDatabase
            publicData.save(self.eventRecord, completionHandler: { record, error in
                if error == nil
                {
                    print("Image saved")
                }else{
                    print(error!)
                }
        })
    }

问题答案:

如果需要以正确的旋转方式保存PNG,则如果方向不正确,则需要重新绘制图像.up。您可以按以下方式重绘它:

extension UIImage {
    func png(isOpaque: Bool = true) -> Data? { flattened(isOpaque: isOpaque)?.pngData() }
    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()
    }
}

编辑/更新:

对于iOS10 + tvOS10 +,您可以使用UIGraphicsImageRenderer

extension UIImage {
    func png(isOpaque: Bool = true) -> Data? { flattened(isOpaque: isOpaque).pngData() }
    func flattened(isOpaque: Bool = true) -> UIImage {
        if imageOrientation == .up { return self }
        let format = imageRendererFormat
        format.opaque = isOpaque
        return UIGraphicsImageRenderer(size: size, format: format).image { _ in draw(at: .zero) }
    }
}

游乐场测试:

不透明图像的用法:

let image = UIImage(data: try! Data(contentsOf: URL(string: "https://i.stack.imgur.com/varL9.jpg")!))!

if let data = image.png() {
    let imageFromPNGData = UIImage(data: data)
}

具有透明度:

if let data = image.png(isOpaque: false) {
    let imageFromPNGData = UIImage(data: data)
}


 类似资料:
  • 图片保存 将需要的内容保存在独立的文件里便于之后的导出。(存储于 Web 所用格式 Alt + Shift + Ctrl + S) 如需保存独立图层则要把需要的图层拖到新建的透明背景的图层,或在图层上右键复制(Duplicate)图层选择地址为新文件即可。 图片与背景合并的切图方法如下 保存格式的选择 保存类型一:色彩丰富切无透明要求时保存为 JPG 格式并选用时候的品质(通常使用品质 80 )。

  • 这个问题已经被问了无数次,但是没有一个真正解决保存时的旋转问题。 这是我最初如何保存一个位图到我的设备: 以上内容保存了。 然后我看到了这个答案,但问题是它将已经保存的位图旋转到正确的方向。例如,如果您想将设置为,则可以这样做。但是,如果我想共享位图,或者想在设备库中打开它,方向仍然不正确。然后,我将不得不执行与上面相同的过程-等。这将导致同样的问题。 如何将

  • 函数名称:保存图片 函数功能: 将图片对象转成图片 函数方法 image.save(img,path,quality) 参数 类型 必填 说明 img userdata 是 图片对象 path string 是 要保存的图片路径和文件名,保存的路径必须已存在,不存在不会自动创建 quality userdata 否 图片质量,仅对 jpg 格式有效,参数范围:0.1 - 1 函数用例 path =

  • 图片下载和存取的简单demo。实现同步和异步两种下载方式。并且将下载好的图片保存在Document,然后进行读取显示。 [Code4App.com]

  • 所以我用下面的方法设置了摄像头- 如您所见,我在摄像机参数上使用了setRoation()来实际指定图像方向,并在摄像机本身上使用了setDisplayOriation()来处理表面预览中的方向更改。(注释和未注释的代码似乎都没有保留方向。当我检查数据时,它返回0) 之后,在回调中,我甚至尝试使用矩阵保存具有方向的图像。 实际问题 > 当我在肖像模式下拍照时,一切正常。它看起来像是被拿走了。 但是

  • 本文向大家介绍iOS archive保存图片到本地的方法,包括了iOS archive保存图片到本地的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了iOS保存图片到本地的具体代码,供大家参考,具体内容如下 一、工程图 二、代码 RootViewController.h RootViewController.m 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持