iOS CIImage拉伸图像

时间:2015-03-25 05:36:20

标签: ios xcode uiimage ciimage

虽然我将imageView设置为aspectFit,但似乎通过CIImage创建的图像将始终缩放以填充。

通过两种方式加载图像的简单示例:

// 1. load directly via UIImage
UIImage *imageByUIImage = [UIImage imageNamed:@"Megan-Fox-Look.jpg"];
self.uiImageView.image = imageByUIImage;

// 2. load via CIImage
NSString *filePath =
[[NSBundle mainBundle] pathForResource:@"Megan-Fox-Look" ofType:@"jpg"];
CIImage *ciImage =
[CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:filePath]];
UIImage *imageByCIImage = [UIImage imageWithCIImage:ciImage scale:1.f orientation:UIImageOrientationUp];
self.ciImageView.image = imageByCIImage;

2个图像视图(uiImageView和ciImageView)具有相同的属性' aspectFit'和相同的尺寸限制(200x200)。但只有(1)正确显示图像,(2)拉伸图像。

问题是什么?谢谢。

我通过Xcode 6.2创建我的项目

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试通过CIImage加载

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"abcd" ofType:@"png"];
CIImage *ciImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:filePath]];
UIImage *imageByCIImage = [UIImage imageWithCIImage:ciImage scale:1.0f orientation:UIImageOrientationUp];

UIGraphicsBeginImageContext(imageByCIImage.size);
[imageByCIImage drawInRect:CGRectMake(0,0,imageByCIImage.size.width,imageByCIImage.size.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
self.imageview.image = newImage;
UIGraphicsEndImageContext();

答案 1 :(得分:0)

CIImage文档指出

  

尽管CIImage对象具有与之关联的图像数据,但它不是图像

拉伸问题可能与UIImageView将管理实际渲染这一事实有关。在其他文章中以及使用CIFilters的过程中,它可能使用CIContext使用rect视图作为区域而不是原始图像大小来进行绘制或渲染。

上一篇文章解决了这个问题,Matt的this article也提到了其他文章中看到的一个选项:使用CGImageRef中介表示。

UIImage(cgImage: self.context.createCGImage(outputImage, from: outputImage.extent)!)