diff --git a/MacPass/NSImage+MPQRCode.h b/MacPass/NSImage+MPQRCode.h index 87ed53ad..5ef1fe84 100644 --- a/MacPass/NSImage+MPQRCode.h +++ b/MacPass/NSImage+MPQRCode.h @@ -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 diff --git a/MacPass/NSImage+MPQRCode.m b/MacPass/NSImage+MPQRCode.m index 9ac3db32..6a56382e 100644 --- a/MacPass/NSImage+MPQRCode.m +++ b/MacPass/NSImage+MPQRCode.m @@ -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