【问题标题】:Create png image from QRCode for iPhone从 iPhone 的 QRCode 创建 png 图像
【发布时间】:2011-08-30 13:00:50
【问题描述】:

我一直在使用 zxing 来解码二维码。我现在也让编码器工作了,可以创建包含编码数据的二维码。

我在问是否有人知道如何将此 QRCOde 数据转换为 png 图像。

【问题讨论】:

    标签: objective-c png qr-code zxing encode


    【解决方案1】:

    如果您的应用可以在线访问,那么您可以使用 http://www.tag.cx/qr-codes/ 之类的内容

    许多用户正在寻找一种在 iPhone 上以编程方式对 QR 码和其他代码进行编码的方法。这些功能尚未从 Android 移植到 iPhone,如 Zxing 线程所述:https://groups.google.com/group/zxing/browse_thread/thread/7325ed13cc49122c/aba6f4545c5c3583?lnk=gst&q=encode+to+png+iphone#aba6f4545c5c3583

    请参阅此问题以进行进一步讨论: Generate 2D bar code (e.g. QR Code, Data Matrix, PDF417) on iPhone and Android

    您可以使用Phonegap 使用插件here 对二维码进行编码。按照说明进行操作,您应该会成功。

    Javascript 很简单,直接取自https://github.com/phonegap/phonegap-plugins/

       window.plugins.barcodeScanner.encode(BarcodeScanner.Encode.TEXT_TYPE, "http://www.nytimes.com", function(success) {
        alert("encode success: " + success);
      }, function(fail) {
        alert("encoding failed: " + fail);
      }, {yesString: "Install"}
    );
    

    【讨论】:

    • 我需要离线生成图片。
    • 编辑了答案以包含允许以编程方式编码二维码的 Phonegap 插件。
    【解决方案2】:

    psytec 编码器 (http://groups.google.com/group/zxing/msg/27e421daeb510d0f) 运行良好。我在生产中使用它。使用 libpng 之类的东西从它产生的位数组到 png 应该是相对简单的。在设备上,我遍历它产生的位数组并直接绘制到 CG 上下文中。

    【讨论】:

    • 您能否发布您的代码和/或指向所需文件的链接以执行此操作?我找到了所有的 c/cpp 文件,但无法成功编译或进行任何操作
    • 我在 iOS 上使用的实际 Objective C++ 代码的骨架位于 gist.github.com/1005365。也许这会有所帮助。但恐怕我没有将它放入 Xcode 的说明。它深深植根于我的项目中,因此很难将其提取出来。
    【解决方案3】:

    如果您正在使用 phonegap 并且需要离线支持,也许jquery qrcode 可以提供帮助。

    【讨论】:

      【解决方案4】:

      this Github 链接下载二维码生成器的示例代码,更简单更容易。将该示例项目中使用的资源文件添加到您的项目中。

      如果只想显示UIImageview中生成的二维码,可以直接使用示例项目中的代码

      如果您需要带有二维码的png文件意味着您可以从UIImageview的图像中获取NSData并将NSData转换为png文件并使用它。

      【讨论】:

        【解决方案5】:

        已编辑这篇文章有类似的问题,我链接到这个答案。

        我在我的一个项目中使用这个简单的代码对二维码进行编码。您可以使用:

        //
        //  QRCodeGeneratorViewController.h
        //  
        //
        //  Created by Jhoney Lopes on 28/09/14.
        //  Copyright (c) 2014 Jhoney Lopes. All rights reserved.
        //
        
        #import <UIKit/UIKit.h>
        
        @interface QRCodeGeneratorViewController : UIViewController
        
        @end
        

        实现.m

        //
        //  QRCodeGeneratorViewController.m
        // 
        //
        //  Created by Jhoney Lopes on 28/09/14.
        //  Copyright (c) 2014 Jhoney Lopes. All rights reserved.
        //
        
        #import "QRCodeGeneratorViewController.h"
        
        @interface QRCodeGeneratorViewController ()
        @property (strong, nonatomic) IBOutlet UIImageView *qrImageView;
        @end
        
        @implementation QRCodeGeneratorViewController
        
        - (void)viewDidLoad {
            [super viewDidLoad];
            // Do any additional setup after loading the view.
        
            [self generateTheQRCodeImageFromDataBaseInfo:@"TEXT-WHAT-YOU-WANT-TO-CONVERT-IN-QRCODE"];
        }
        
        - (void)didReceiveMemoryWarning {
            [super didReceiveMemoryWarning];
            // Dispose of any resources that can be recreated.
        }
        
        #pragma mark - QR Code Generator
        
        - (CIImage *)createQRForString:(NSString *)qrString
        {
            // Need to convert the string to a UTF-8 encoded NSData object
            NSData *stringData = [qrString dataUsingEncoding:NSUTF8StringEncoding];
        
            // Create the filter
            CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
            // Set the message content and error-correction level
            [qrFilter setValue:stringData forKey:@"inputMessage"];
            [qrFilter setValue:@"H" forKey:@"inputCorrectionLevel"];
        
            // Send the image back
            return qrFilter.outputImage;
        }
        
        - (UIImage *)createNonInterpolatedUIImageFromCIImage:(CIImage *)image withScale:(CGFloat)scale
        {
            // Render the CIImage into a CGImage
            CGImageRef cgImage = [[CIContext contextWithOptions:nil] createCGImage:image fromRect:image.extent];
        
            // Now we'll rescale using CoreGraphics
            UIGraphicsBeginImageContext(CGSizeMake(image.extent.size.width * scale, image.extent.size.width * scale));
            CGContextRef context = UIGraphicsGetCurrentContext();
            // We don't want to interpolate (since we've got a pixel-correct image)
            CGContextSetInterpolationQuality(context, kCGInterpolationNone);
            CGContextDrawImage(context, CGContextGetClipBoundingBox(context), cgImage);
            // Get the image out
            UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
            // Tidy up
            UIGraphicsEndImageContext();
            CGImageRelease(cgImage);
            return scaledImage;
        }
        
        - (void)generateTheQRCodeImageFromDataBaseInfo:(NSString *)jsonString {
        
            // Get the string
            NSString *stringToEncode = jsonString;
        
            // Generate the image
            CIImage *qrCode = [self createQRForString:stringToEncode];
        
            // Convert to an UIImage
            UIImage *qrCodeImg = [self createNonInterpolatedUIImageFromCIImage:qrCode withScale:2*[[UIScreen mainScreen] scale]];
        
            // And push the image on to the screen
            self.qrImageView.image = qrCodeImg;
        }
        

        【讨论】:

          猜你喜欢
          • 2013-03-26
          • 2021-09-03
          • 1970-01-01
          • 1970-01-01
          • 2014-12-25
          • 2012-06-04
          • 2014-04-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多