Есть ли библиотека Objective-C, которая позволит мне генерировать QRCodes в автономном режиме? Спасибо
QRCode генерируется в автономном режиме
Ответы (3)
См.: https://github.com/jverkoey/ObjQREncoder#readme.
Использовать
#import <QREncoder/QREncoder.h>
UIImage* image = [QREncoder encode:@"http://www.google.com/"];
+ (UIImage *)encode:(NSString *)str
. измените correctionLevel
на что-то другое, например QRCorrectionLevelLow
. при низких настройках это позволяет мне кодировать более крупный текст
- person james; 04.06.2011
В 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.
Простой и нативный способ создания QR-кода:
(CIImage *) createQRForString: (NSString *) qrString {
NSData *stringData = [qrString dataUsingEncoding: NSISOLatin1StringEncoding];
CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[qrFilter setValue:stringData forKey:@"inputMessage"];
вернуть qrFilter.outputImage; }