kCAFilterNearest maginifcationfilter(UIImageView)

我使用QREncoder库在这里find: https : //github.com/jverkoey/ObjQREncoder

基本上,我看了这个作者的例子代码,当他创buildQRCode时,它完全没有像素化。 库提供的图像本身是33 x 33像素,但他使用kCAFilterNearest来放大并使其非常清晰(无像素化)。 这是他的代码:

UIImage* image = [QREncoder encode:@"http://www.google.com/"]; UIImageView* imageView = [[UIImageView alloc] initWithImage:image]; CGFloat qrSize = self.view.bounds.size.width - kPadding * 2; imageView.frame = CGRectMake(kPadding, (self.view.bounds.size.height - qrSize) / 2, qrSize, qrSize); [imageView layer].magnificationFilter = kCAFilterNearest; [self.view addSubview:imageView]; 

我有一个XII的UIImageView,我设置它的形象是这样的:

 [[template imageVQRCode] setImage:[QREncoder encode:ticketNum]]; [[[template imageVQRCode] layer] setMagnificationFilter:kCAFilterNearest]; 

但是qrcode真的很模糊。 在这个例子中,它清晰可见。 我究竟做错了什么? 谢谢!

更新: 我发现这个问题不是缩放或任何与kCAFFilterNearest有关。 它与从视图中生成PNG图像有关。 下面是它在外观上的样子,以及它如何保存UIView到PNG表示(请注意QRCodes质量):

在这里输入图像说明

更新2:这是我如何从UIView生成PNG文件:

  UIGraphicsBeginImageContextWithOptions([[template view] bounds].size, YES, 0.0); [[[template view] layer] renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [UIImagePNGRepresentation(viewImage) writeToFile:plistPath atomically:YES]; 

我用下面的函数来编辑图像。

 - (UIImage *)resizedImage:(CGSize)newSize interpolationQuality:(CGInterpolationQuality)quality { BOOL drawTransposed; switch (self.imageOrientation) { case UIImageOrientationLeft: case UIImageOrientationLeftMirrored: case UIImageOrientationRight: case UIImageOrientationRightMirrored: drawTransposed = YES; break; default: drawTransposed = NO; } return [self resizedImage:newSize transform:[self transformForOrientation:newSize] drawTransposed:drawTransposed interpolationQuality:quality]; } - (UIImage *)resizedImage:(CGSize)newSize transform:(CGAffineTransform)transform drawTransposed:(BOOL)transpose interpolationQuality:(CGInterpolationQuality)quality { CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height)); CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width); CGImageRef imageRef = self.CGImage; // Build a context that's the same dimensions as the new size CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); if((bitmapInfo == kCGImageAlphaLast) || (bitmapInfo == kCGImageAlphaNone)) bitmapInfo = kCGImageAlphaNoneSkipLast; CGContextRef bitmap = CGBitmapContextCreate(NULL, newRect.size.width, newRect.size.height, CGImageGetBitsPerComponent(imageRef), 0, CGImageGetColorSpace(imageRef), bitmapInfo); // Rotate and/or flip the image if required by its orientation CGContextConcatCTM(bitmap, transform); // Set the quality level to use when rescaling CGContextSetInterpolationQuality(bitmap, quality); // Draw into the context; this scales the image CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef); // Get the resized image from the context and a UIImage CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap); UIImage *newImage = [UIImage imageWithCGImage:newImageRef]; // Clean up CGContextRelease(bitmap); CGImageRelease(newImageRef); return newImage; } UIImageWriteToSavedPhotosAlbum([image resizedImage:CGSizeMake(300, 300) interpolationQuality:kCGInterpolationNone], nil, nil, nil); 

请find下面的图片,让我知道如果你需要任何帮助。

在这里输入图像说明