不必要的失真:核心图像滤镜正在旋转我的图像

时间:2012-08-17 16:37:29

标签: iphone ios xcode image-processing core-image

当我在某些图像上运行核心图像过滤器(如CIHueAdjust)时,它们会意外地旋转90度 - 逆时针旋转。这种失真似乎只发生在纵向方向下使用iOS设备拍摄的图像时。

这是一个简单的xcode项目,它具有图像导入和CIHueAdjust过滤器: owolf.net/uploads/StackOverflow/HueAdjustProject2.zip

如果我在使用iPhone(like this one linked here)拍摄的纵向图像上运行滤镜,结果就像下面的屏幕截图一样。

有没有解决这个问题?谢谢你的阅读。

enter image description here

4 个答案:

答案 0 :(得分:2)

图像具有不同的方向。应用过滤器后,您将失去方向。你应该用简单的仿射变换来补偿方向。

答案 1 :(得分:1)

if ([image imageOrientation] == 3) {
    imageView.transform = CGAffineTransformMakeRotation(M_PI / 2.0);
} else if ([image imageOrientation] == 2) {
    imageView.transform = CGAffineTransformMakeRotation((M_PI / 2.0)*-1);
}  else if ([image imageOrientation] == 1) {
    imageView.transform = CGAffineTransformMakeRotation(M_PI);    
}else {
    //no rotation necessary    
}

答案 2 :(得分:0)

您可以使用带有3个参数的函数UIIMage.FromImage(CIImage,scale,Orientation = Right)将图像旋转回原始方向。以下是代码段:

var rotatedCIImage = imageEffectFunc (src); //rotatedCIImage = your CIImage after taken effect that has been rotated 90° counter clockwise.

if (rotatedCIImage != null) {
   UIImage result = UIImage.FromImage(rotatedCIImage,1.0f,UIImageOrientation.Right);
   return result;
} else {
   return null;
}

答案 3 :(得分:0)

我遇到了同样不希望的轮换问题。

我通过记住要过滤的UIImage的高度是否大于应用过滤器之前的宽度来解决该问题。

应用过滤器后,我再次检查UIImage的高度是否仍然大于宽度。如果不是,我会将UIImage旋转90度。

在确定滤镜已旋转图像之后,我在此处利用扩展来旋转UIImage。 : Rotating UIImage in Swift

在此示例中,我在应用滤镜之前和应用滤镜之后都获取了UIImage的高度和宽度: iphone - how can i get the height and width of uiimage

我进行过更正的代码如下所示:

if heightIsLargerThanWidth && slideShowImageView_2.image!.size.height < slideShowImageView_2.image!.size.width
{
    self.slideShowImageView_2.image = self.slideShowImageView_2.image?.rotate(radians: .pi/2)
}

注意heightIsLargerThanWidth包含一个布尔值,指示应用过滤器之前的状态。

相关问题