我从相机中使用AVCaptureSession捕捉图像:
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
所述图像被转换成一个UIImage并添加到图像视图。该图像显示在人像方向,符合市场预期。
我试图将图像保存到捕捉会话之间的核心数据。我的核心数据实体与二进制数据类型的图像性能。
coreDataEntity.image = UIImagePNGRepresentation(imageView.image);
一旦用户重新加载以前保存的会话,图像视图具有使用其图像恢复:
imageView.image = [UIImage imageWithData:coreDataEntity.image];
然而,上述还原图像逆时针旋转90度与它的顶部指向左侧。
在这一点没有图像得到旋转?它是保存过程中或核心数据加载中?
我有90度旋转一个UIImage的方法,但现在看来,在同一图像的后续重新加载时,它会通过额外的90度旋转。我怎样才能知道我已经转动一个UIImage一次?
感谢您的任何帮助!
我不会强迫数据库的格式。通过将其存储在数据库之前转换成PNG,要删除这可能是需要的信息(如方向)。
如果我的假设是正确的,尝试序列化的UIImage这样,而不是:
[NSKeyedArchiver archivedDataWithRootObject:image]
与此反序列化
[NSKeyedUnarchiver unarchiveObjectWithData:imageData]
此外,一定要检查出NSValueTransformer
,它可以封装这种转换,让你永远不必处理它,一旦它的工作。
一年后,你可能已经解决了这个自己,但我自己最近遇到过这个问题,我想我会把我的解决方案。
我改变了存储的图像格式为JPEG。
更改
coreDataEntity.image = UIImagePNGRepresentation(imageView.image);
至
coreDataEntity.image = UIImageJPEGRepresentation(imageView.image,1.0f);
图像被恢复为前
imageView.image = [UIImage imageWithData:coreDataEntity.image];
希望这可以帮助别人。
我的猜测是,它既不在加载或保存。我觉得很可疑,你有一个90度旋转图像,这只是发生了什么你的图像的方法。尝试修改你的方法,通过不同的角度(0例),旋转,看它会影响您的错误。我怀疑你的旋转方法被调用,你不知道它。
另一种可能性是,你认为你的iPhone / iPad的景观,当你把你的照片,但你的应用程序不支持设备旋转。
有一个在您的文章真的不多的信息,所以我只是想探听这里:)
斯威夫特4>:保存图像pngData()调用这个函数,在这里使用返回的图像之前:
func rotatedCopy() -> UIImage {
if self.imageOrientation == UIImage.Orientation.up {
return self
}
UIGraphicsBeginImageContext(size)
//draws the image in current context respecting orientation
draw(in: CGRect(origin: CGPoint.zero, size: size))
let copy = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return copy!
}