Swift 为什么jpegData不保存已调整大小的图像?更新

Swift 为什么jpegData不保存已调整大小的图像?更新,swift,uiimage,Swift,Uiimage,我正在从相机或照片库中拍摄照片,并将其保存在我的应用程序中。我不需要这么大的图像,所以我使用了一个扩展来缩小它。然后我将它保存到应用程序空间。但是尺寸的减小并没有被保存 我尝试过各种大小更改、删除和保存的排列方式 let path = "/var/mobile/Containers/Data/Application/0595DE63-AE43-4DCF-9BD0-FB552844ECF5/Documents/tour15/H25.jpg" prin

我正在从相机或照片库中拍摄照片,并将其保存在我的应用程序中。我不需要这么大的图像,所以我使用了一个扩展来缩小它。然后我将它保存到应用程序空间。但是尺寸的减小并没有被保存

我尝试过各种大小更改、删除和保存的排列方式

            let path = "/var/mobile/Containers/Data/Application/0595DE63-AE43-4DCF-9BD0-FB552844ECF5/Documents/tour15/H25.jpg"
            print("A",hotspotImage.image!.size)
            hotspotImage.image = hotspotImage.image!.resizeImage(2048, opaque: true)
            print("B",hotspotImage.image!.size)
            let fileManager  = FileManager.default
            try! fileManager.removeItem(atPath: path)
            try! hotspotImage.image!.jpegData(compressionQuality: 0.8)!.write(to: URL(fileURLWithPath: path), options: [.atomic])
            print("C",hotspotImage.image!.size)
            let  imageTest = UIImage(contentsOfFile: path)
            print("D",imageTest!.size)
结果是

A(4032.03024.0)

B(2048.01536.0)

C(2048.01536.0)

D(4096.0、3072.0)

当我检索“更新”图像时,它具有原始大小。您无法看到这一点,但图像肯定已被替换

显然,我错过了一些基本的东西——请让我摆脱痛苦

向那些之前回应的好心人道歉——但我现在发现了一些额外的重要信息。这个例子愚弄了我们所有人。当我将缩小尺寸更改为200(而不是原来尺寸的一半)时,我得到以下结果:

A(40323024)

B(200 150)

C(200 150)

D(400 300)

因此,现在发生的事情是将大小增加一倍——而不是——正如我之前所想的那样——不使用新的大小进行更新

这让它更清晰还是更像一个谜

说到拼图,我得到了-1,但没有人说为什么。

UIImage(名:)
缓存图像。第二次调用它时,您并没有从磁盘读取数据(我猜您以前在某个地方使用相同的路径调用过它)。要绕过缓存,需要使用
init(contentsOfFile:)

以下各项应按预期工作:

let path = getAppFolder() + photoUrl
print("A",hotspotImage.image!.size)
hotspotImage.image = hotspotImage.image!.resizeImage(2048, opaque: true)
print("B",hotspotImage.image!.size)
let fileManager  = FileManager.default
try! fileManager.removeItem(atPath: path)
try! hotspotImage.image!.jpegData(compressionQuality: 0.8)!.write(to: URL(fileURLWithPath: path), options: [.atomic])
print("C",hotspotImage.image!.size)
let  imageTest = UIImage(contentsOfFile: path)
print("D",imageTest!.size)

如果自动将所需大小加倍,则听起来好像正在应用屏幕缩放。我将检查正在使用的扩展。如果缩放设置为0.0,则将应用当前屏幕缩放


屏幕缩放对于出现在屏幕上的图像非常有用。(这就是为什么它被称为屏幕缩放。)但是创建目标不是屏幕的图像时,缩放应设置为1.0以保持所需的大小,并且将其加倍或三倍。

在打印文件时,文件是否可能尚未写入?这是一个好主意,但是,当我晚些时候检查大小时,它仍然是错误的,并且图像被删除,因此无法获得任何大小。您无法为
getAppFolder()+photoUrl
提供有效值,该值同时适用于
write(to:)
UIImage(name:)
UIImage(命名:)
仅用于从应用程序的资源包中按名称(而不是路径)加载图像。而且你不能(在真实设备上)写入应用程序包。谢谢你的回复。我已将实际路径值添加到问题中,以尝试进一步澄清。你的答案听起来不错,但是,实际的图像确实得到了更新,但它与原始大小相同。也许我不理解你,你能提供一些建议的代码来解决它吗?非常感谢你的建议。不幸的是,您的代码给出的结果与我的相同。谢谢。是的,它修好了。我将UIGraphicSimageRenderFormat更改为scale=1,倍增效应消失。