QRCode генерируется в автономном режиме

Есть ли библиотека Objective-C, которая позволит мне генерировать QRCodes в автономном режиме? Спасибо


person sumderungHAY    schedule 27.05.2011    source источник
comment
Возможный дубликат Создать png-изображение из QRCode для iPhone   -  person J. Lopes    schedule 29.04.2016


Ответы (3)


См.: https://github.com/jverkoey/ObjQREncoder#readme.

Использовать

#import <QREncoder/QREncoder.h>

UIImage* image = [QREncoder encode:@"http://www.google.com/"];
person patrick    schedule 27.05.2011
comment
Чувак, ты спас мне жизнь. Не пробовал это, но выглядит многообещающе .. Спасибо, мужик! - person sumderungHAY; 28.05.2011
comment
он также не может кодировать большие фрагменты текста, например, более 35 символов. я нашел способ кодировать текст большего размера, посмотрите QREncoder.m на функцию с именем + (UIImage *)encode:(NSString *)str. измените correctionLevel на что-то другое, например QRCorrectionLevelLow. при низких настройках это позволяет мне кодировать более крупный текст - person james; 04.06.2011
comment
Немного поздний ответ, но если вы посмотрите на пример кода, вы увидите, как сделать его не размытым. - person user635064; 27.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.

person Erik Engheim    schedule 29.05.2014

Простой и нативный способ создания QR-кода:

  • (CIImage *) createQRForString: (NSString *) qrString {

    NSData *stringData = [qrString dataUsingEncoding: NSISOLatin1StringEncoding];

    CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

    [qrFilter setValue:stringData forKey:@"inputMessage"];

    вернуть qrFilter.outputImage; }

person Adeel    schedule 12.07.2017