Я использую библиотеку QREncoder, найденную здесь: https://github.com/jverkoey/ObjQREncoder
По сути, я посмотрел пример кода этого автора, и когда он создает QRCode, он получается идеально без пикселизации.Само изображение, которое предоставляет библиотека, имеет размер 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];
У меня есть UIImageView в xib, и я устанавливаю его изображение так:
[[template imageVQRCode] setImage:[QREncoder encode:ticketNum]];
[[[template imageVQRCode] layer] setMagnificationFilter:kCAFilterNearest];
, но код qrcode действительно размытый.В примере это получается кристально чистым.Что я делаю неправильно?Спасибо!
ОБНОВЛЕНИЕ: Я обнаружил, что проблема не в масштабировании и не в том, что связано с kCAFFilterNearest.Это связано с генерацией PNG-изображения из вида. Вот как оно выглядит на изображении и как оно выглядит, когда я сохраняю UIView в представление PNG (обратите внимание на качество QRCodes):
ОБНОВЛЕНИЕ 2: Вот как я генерирую файл PNG из UIView:
UIGraphicsBeginImageContextWithOptions([[template view] bounds].size, YES, 0.0);
[[[template view] layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[UIImagePNGRepresentation(viewImage) writeToFile:plistPath atomically:YES];