2014-10-02 4 views
0

CIFilter에서 제공하는 CIQRCodeGenerator 필터를 사용하여 QR 코드 이미지를 생성 중입니다. 이미지가 잘 생성되고 표시되면 AVCaptureSession을 사용하여 이미지를 읽을 수 있습니다. 그러나 다른 플랫폼 (Android, BlackBerry, iOS 6)을 사용하여 QR 코드를 스캔하려고하면 이미지를 인식하지 못합니다. Apple의 문서에 따르면 생성 된 이미지는 ISO/IEC 18004 : 2006 표준을 준수합니다. ISO 18004 : 2000을 준수해야하는 문제가 있습니까? 샘플 QR 코드 여기다른 플랫폼에서 iOS가 QR 코드를 인식하지 못했습니다.

NSData *stringData = [stringToEncode dataUsingEncoding:NSISOLatin1StringEncoding]; 

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

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

CIImage *qrImage = qrFilter.outputImage; 

return [UIImage squareUIImageFromCIImage:qrImage withSize:size]; 

된다 : 생성하는 방법이 있는지

sample QR code

아무도 알고 있나요 여기

내가 이미지를 생성하기 위해 사용하고 코드입니다 CIFilter를 사용하여보다 보편적으로 인정되는 QR 코드 이미지? ZXing을 다시 사용하지 않는 것이 좋습니다.

감사합니다.

+0

QR 코드는 QR 코드입니다 ... 표준입니다. – ceejayoz

+0

@ceejayoz 표준이지만 다른 문서로 다뤄지는 구현이 있습니다. ISO/IEC 18004 : 2000에서는 QR 코드 모델 1과 2를 정의했습니다. ISO/IEC 18004 : 2006은 QR 코드 모델 2의 확장 된 QR 코드 2005 기호를 정의합니다 (http://en.wikipedia.org/wiki/QR_code에서 가져옴) . – mcsheffrey

답변

4

나는 약간의 변화가 차이가 있는지 모르겠지만, 여기에 두 번째 아래에서 성공적으로 아이 패드 카메라에서 스캔 된 QR 코드 생성 내 최근 프로젝트에서 코드 조각입니다 :

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

[filter setDefaults]; 

NSData *data = [accountNumber dataUsingEncoding:NSUTF8StringEncoding]; 
[filter setValue:data forKey:@"inputMessage"]; 

CIImage *outputImage = [filter outputImage]; 

CIContext *context = [CIContext contextWithOptions:nil]; 
CGImageRef cgImage = [context createCGImage:outputImage 
            fromRect:[outputImage extent]]; 

UIImage *barcode = [UIImage imageWithCGImage:cgImage 
            scale:1. 
           orientation:UIImageOrientationUp]; 

// EDIT: 
CFRelease(cgImage); 
+0

그랬어! setDefaults에 대한 호출은 아무 것도하지 않는 것 같지만 (CIMontext로 CGImageRef를 만드는 중간 단계에서 문제가 해결됨) 고맙습니다! – mcsheffrey

+0

이 코드는 메모리를 유출합니다. CGImageRef를 릴리즈하는 것을 잊지 마십시오. –

+0

문제가 없습니다 @ mcsheffrey : 내 CGImageRef를 풀어주는 고정 답변 – Chris

1

은 ISO-8859-1 문자 집합을 사용하고 있지만 다른 QR 코드 독자는 자신이 따르는 표준 버전에 따라 문자 인코딩에 대해 다른 가정을 가정합니다. UTF-8은 ISO-8859-1보다 더 일반적인 것 같습니다.

+0

예, 원래 UTF-8 인코딩을 사용하고 있었기 때문에 작동하지 않아서 NSISOLatin1StringEncoding으로 바꿨습니다. 그 이유는 CIQRCodeGenerator에 대한 Apple 설명서가 권장했기 때문입니다. 나는 UTF-8이 아마도 여기에서 사용하는 것이 가장 좋을 것이라고 생각하지만, 내가 겪고있는 문제의 원인이 아니다. 고맙습니다! – mcsheffrey

관련 문제