【发布时间】:2018-08-08 09:52:31
【问题描述】:
我知道有很多这样的问题,但他们的解决方案对我不起作用。
注意:图片是从互联网下载的。它不是从iPhone 的相机拍摄的。
我有一个UIImage。为了进行一些图像处理操作,我使用Metal 并将图像呈现在MTKView 中。因此,我将图像转换为CIImage。
在对图像进行所有修改后,我将其转换回CGImage,然后再转换为UIImage 并保存。
因此保存的图片方向错误。
我不确定它在哪一步失去了方向(从UIImage 转换为CIImage 以添加到MTKView,或从CIImage 转换为CGImage 然后转换为UIImage保存)。因为我不确定,所以我在下面提供了我为每个步骤尝试过的所有内容:
用于从UIImage 转换为CIImage:
最初我只是以这种方式转换图像:
let let ciImage = CIImage(image: image)
然后我尝试使用以下方式:
let ciImage = CIImage(image: image)?.oriented(forExifOrientation: imageOrientationToTiffOrientation(value: image.imageOrientation))
这里是方法imageOrientationToTiffOrientation的实现(我找到了here):
func imageOrientationToTiffOrientation(value: UIImageOrientation) -> Int32
{
switch (value)
{
case .up:
return 1
case .down:
return 3
case .left:
return 8
case .right:
return 6
case .upMirrored:
return 2
case .downMirrored:
return 4
case .leftMirrored:
return 5
case .rightMirrored:
return 7
}
}
用于从CIImage 转换为CGImage,然后再转换为UIImage:
我像往常一样将CIImage 转换为CGImage:
let cgImage = context?.createCGImage(ciImage, from: ciImage.extent)
然后我以这种方式将cgImage 转换为UIImage (imageToSave):
let imageToSave = UIImage(cgImage: cgImage, scale: image.scale, orientation: imageOrientation)
imageOrientation 和image.scale 是原始图像的方向和比例。
因此,保存的图像仍然有错误的方向。
有趣的是,当我打印这些图像方向的原始值时,它们与0 相同,即.up,但是正如我所说,保存后方向是错误的。
我很困惑为什么会这样。如果您对如何解决此问题有任何建议,我将不胜感激。
【问题讨论】:
-
请出示您的实际代码并说明您是如何“知道”您迷失方向的。没有“保存” UIImage 这样的东西,所以不清楚你在做什么。您只能保存图像数据。如果您的目标是保存 CIImage 中的图像数据,您应该调用
CIContext().writeJPEGRepresentation。
标签: ios swift uiimage cgimage ciimage