Added API to create QR Code images.

This commit is contained in:
Michael Starke
2021-01-08 09:07:30 +01:00
parent fd88b2c506
commit de0319abae
2 changed files with 27 additions and 1 deletions

View File

@@ -14,6 +14,9 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, readonly, copy) NSString *QRCodeString;
+ (instancetype)QRCodeImageWithString:(NSString *)string;
- (instancetype)initWithCIImage:(CIImage *)ciImage;
@end
NS_ASSUME_NONNULL_END

View File

@@ -14,7 +14,7 @@
- (NSString *)QRCodeString {
NSRect rect = NSMakeRect(0, 0, self.size.width, self.size.height);
id imageRep = [self bestRepresentationForRect:rect context:nil hints:nil];
if([imageRep isKindOfClass:NSBitmapImageRep.class]) {
if(![imageRep isKindOfClass:NSBitmapImageRep.class]) {
return @"";
}
NSBitmapImageRep *bitmapRep = (NSBitmapImageRep *)imageRep;
@@ -30,4 +30,27 @@
return @"";
}
+ (instancetype)QRCodeImageWithString:(NSString *)string {
NSData *asciiData = [string dataUsingEncoding:NSISOLatin1StringEncoding];
if(!asciiData) {
return nil;
}
CIFilter *qrCodeFilter = [CIFilter filterWithName:@"CIQRCodeGenerator" withInputParameters:@{@"inputMessage": asciiData}];
NSAffineTransform *scale = [[NSAffineTransform alloc] init];
[scale scaleBy:5];
CIFilter *scaleFilter = [CIFilter filterWithName:@"CIAffineTransform" withInputParameters:@{@"inputImage": qrCodeFilter.outputImage, @"inputTransform": scale}];
return [[NSImage alloc] initWithCIImage:scaleFilter.outputImage];
}
- (instancetype)initWithCIImage:(CIImage *)ciImage {
NSCIImageRep *imageRep = [NSCIImageRep imageRepWithCIImage:ciImage];
self = [self initWithSize:[imageRep size]];
if(self) {
[self addRepresentation:imageRep];
}
return self;
}
@end