В Mavericks и iOS7 генерация QR-кода является частью Core Image.Вы просто используете фильтр CIQRCodeGenerator .На Github вы можете найти класс , который реализует это для iOS.Я адаптировал этот код для получения кода, совместимого с OS X, ниже:
NSString *website = @"http://stackoverflow.com/";
NSData *urlAsData = [website dataUsingEncoding:NSUTF8StringEncoding];
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
[filter setValue: urlAsData forKey:@"inputMessage"];
[filter setValue:@"M" forKey:@"inputCorrectionLevel"];
CIImage *outputImage = [filter valueForKey:kCIOutputImageKey];
Если вы хотите нарисовать CIImage, есть несколько возможностей.Вы можете создать NSImage
следующим образом:
CIContext *context = [[NSGraphicsContext currentContext] CIContext];
CGImageRef cgImage = [context createCGImage:outputImage
fromRect:[outputImage extent]];
NSImage *image = [[NSImage alloc] initWithCGImage:cgImage size:NSZeroSize];
Но это изображение будет намного меньше, чем вы хотите.Я считаю, что каждая черная точка в QR-коде просто становится одним пикселем.Не совсем то, что вы хотите.Чтобы увеличить масштаб изображения, не делая его размытым, сделайте следующее:
NSSize largeSize = NSMakeSize(image.size.width * 10, image.size.height * 10);
[image setScalesWhenResized:YES];
NSImage *largeImage = [[NSImage alloc] initWithSize:largeSize];
[largeImage lockFocus];
[image setSize:largeSize];
[[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationNone];
[image drawAtPoint:NSZeroPoint fromRect:CGRectMake(0, 0, largeSize.width, largeSize.height) operation:NSCompositeCopy fraction:1.0];
[largeImage unlockFocus];
largeImage
- это ваше изображение результата, которое вы можете отобразить.
Если вы хотите декодировать QR, который вы используетеAVFoundation, как объяснено в этом блоге .К сожалению, на данный момент это поддерживается только на iOS7.