用CIFilter生成QRCode二维码图片

CIFilter不仅仅可以用来做滤镜,它还可以用来生成二维码.

CIFilterEffect.h + CIFilterEffect.m

//
//  CIFilterEffect.h
//  CIFilter
//
//  Created by L.S. on 14-5-9.
//  Copyright (c) 2014年 L.S. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface CIFilterEffect : NSObject

@property (nonatomic, strong, readonly) UIImage *filterImage;
- (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name;

@property (nonatomic, strong, readonly) UIImage *QRCodeImage;
- (instancetype)initWithQRCodeString:(NSString *)string width:(CGFloat)width;

@end

//
//  CIFilterEffect.m
//  CIFilter
//
//  Created by L.S. on 14-5-9.
//  Copyright (c) 2014年 L.S. All rights reserved.
//

#import "CIFilterEffect.h"

@interface CIFilterEffect ()

@property (nonatomic, strong, readwrite) UIImage *filterImage;
@property (nonatomic, strong, readwrite) UIImage *QRCodeImage;

@end

@implementation CIFilterEffect

- (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name
{
    self = [super init];
    if (self)
    {
        // 将UIImage转换成CIImage
        CIImage *ciImage = [[CIImage alloc] initWithImage:image];

        // 创建滤镜
        CIFilter *filter = [CIFilter filterWithName:name
                                      keysAndValues:kCIInputImageKey, ciImage, nil];
        [filter setDefaults];

        // 获取绘制上下文
        CIContext *context = [CIContext contextWithOptions:nil];

        // 渲染并输出CIImage
        CIImage *outputImage = [filter outputImage];

        // 创建CGImage句柄
        CGImageRef cgImage = [context createCGImage:outputImage
                                           fromRect:[outputImage extent]];

        _filterImage = [UIImage imageWithCGImage:cgImage];

        // 释放CGImage句柄
        CGImageRelease(cgImage);
    }
    return self;
}

- (instancetype)initWithQRCodeString:(NSString *)string width:(CGFloat)width
{
    self = [super init];
    if (self)
    {
        CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

        [filter setDefaults];

        NSData *data = [string 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 *image = [UIImage imageWithCGImage:cgImage
                                             scale:0.1
                                       orientation:UIImageOrientationUp];

        // 不失真的放大
        UIImage *resized = [self resizeImage:image
                                 withQuality:kCGInterpolationNone
                                        rate:5.0];

        // 缩放到固定的宽度(高度与宽度一致)
        _QRCodeImage = [self scaleWithFixedWidth:width image:resized];

        CGImageRelease(cgImage);
    }
    return self;
}

- (UIImage *)scaleWithFixedWidth:(CGFloat)width image:(UIImage *)image
{
    float newHeight = image.size.height * (width / image.size.width);
    CGSize size = CGSizeMake(width, newHeight);
    UIGraphicsBeginImageContextWithOptions(size, NO, 0);

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextTranslateCTM(context, 0.0, size.height);
    CGContextScaleCTM(context, 1.0, -1.0);

    CGContextSetBlendMode(context, kCGBlendModeCopy);
    CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, size.width, size.height), image.CGImage);

    UIImage *imageOut = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return imageOut;
}

- (UIImage *)resizeImage:(UIImage *)image
             withQuality:(CGInterpolationQuality)quality
                    rate:(CGFloat)rate
{
    UIImage *resized = nil;
    CGFloat width = image.size.width * rate;
    CGFloat height = image.size.height * rate;

    UIGraphicsBeginImageContext(CGSizeMake(width, height));
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetInterpolationQuality(context, quality);
    [image drawInRect:CGRectMake(0, 0, width, height)];
    resized = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return resized;
}

@end

看看以下使用情况,一行代码搞定!

以下几个二维码,闲得无聊可以扫一扫......

用CIFilter生成QRCode二维码图片

时间: 2024-07-29 21:14:04

用CIFilter生成QRCode二维码图片的相关文章

转:Java生成带有二维码图片的word文档

(一)功能描述:在智能终端的系统中,对所有学员的信息要生成带有二维码图片的报到证与准考证的word文档 (二)实现过程: 1.创建报到证与准考证的word模板,在模板中填充相应的变量. 2.该模板中存在图片,所以在制作模板中应先在相应的位置放一张图片,调整好大小,起到站位的作用 1.创建报到证与准考证的word模板,在模板中填充相应的变量. 2.在该模板中存在图片,所以在制作模板中应先在相应的位置放一张图片,调整好大小,起到 3.将创建好的模板另存为.xml格式的文件 3.此时的.xml格式的文

jQuery生成QRCode二维码

<!DOCTYPE html> <html> <head>   <meta charset="utf-8">   <title>jQuery生成QRCode二维码</title> </head> <body> <!-- 存放二维码 --> <div id="qrcode-1"></div> <!-- 存放二维码 --> &l

PHP生成QRCode二维码

<?php //引入 phpqrcode 类库 //phpqrcode下载地址:https://github.com/t0k4rt/phpqrcode require_once "phpqrcode/qrlib.php"; //第一种(缺省下在网页中生成二维码) //调用QRCode类下的png静态方法 QRcode::png("this is a qrcode"); $content = "this is a qrcode"; //内容

Java使用ZXing生成/解析二维码图片

ZXing是一种开源的多格式1D/2D条形码图像处理库,在Java中的实现.重点是在手机上使用内置摄像头来扫描和解码设备上的条码,而不与服务器通信.然而,该项目也可以用于对桌面和服务器上的条形码进行编码和解码.目前支持这些格式: UPC-A and UPC-E EAN-8 and EAN-13 Code 39 Code 93 Code 128 ITF Codabar RSS-14 (all variants) RSS Expanded (most variants) QR Code Data M

微信支付-无法识别qrcode生成的二维码图片

1.开始使用 table方式,但是还是无法识别二维码  http://www.cnblogs.com/staticed/p/8549316.html var code_url = data.code_url; $("#wechatQrcode").qrcode({ render: "table", //table方式 width: 200, //宽度 height:200, //高度 text: code_url //任意内容 }); 2.后来采用canvas方式,

Winform 利用ThoughtWorks.QRCode 生成二维码,并另存为二维码图片(限制大小)

第一步首先:下载ThoughtWorks.QRCode.dll 放置到项目Bin目录下,然后右键项目添加引用: 第二步界面代码: #region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容. /// </summary> private void InitializeComponent() { this.groupBox1 = new System.Windows.Forms.Gr

JAVA生成二维码图片代码

首先需要导入 QRCode.jar 包 下载地址看这里   http://pan.baidu.com/s/1o6qRFqM import java.awt.Color;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.UnsupportedEncoding

java--实现将文字生成二维码图片,并在中间附上logo,下方附上文字

前段时间因为工作需要,要实现将一段文字或者url生成二维码,然后中间附上logo,下方正中间附上文字的功能. 上网找了几篇教程学习了下,由于没有保存借鉴的博文链接,所以就没po上参考文章的链接啦,感谢几位博主的分享~ 大概的实现效果如下图所示: 实现步骤: (1)导入java_ZXing_jar包,点此下载jar包 (2)编写画二维码代码 1 package QRCode; 2 3 import com.google.zxing.common.BitMatrix; 4 import javax.

使用javascript生成当前博文地址的二维码图片

前面的话 在电脑端发现一篇好的博文,想在手机上访问.这时,就必须打开手机浏览器输入长长的URL地址才行,非常不方便.如果在博客标题的后面跟一张小的图片,点击该图片后,出现一张二维码的大图,然后再通过手机扫一扫,来进行博文的访问,就相对方便很多. 通过搜索引擎搜索了一些生成二维码的文章,发现其并不是一件容易的事.同时,也发现了qrcode插件,该插件专门用于生成二维码.于是,在qrcode的基础上,实现了一个二维码插件qr 效果演示 如果细心的话,会发现该博文标题的后面紧跟着一个表示二维码的手机小