美文网首页iOS开发
个性化二维码设计

个性化二维码设计

作者: 26b5cc676194 | 来源:发表于2017-04-25 10:35 被阅读38次

二维码实际上就是字符串,用来记录信息的,由点组成,下面我们来构建个性化的二维码

1.第一步:创建原始二维码

+(CIImage *)Create_Original_CIImageWithString:(NSString *)str{

CIFilter *filter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:data forKeyPath:@"inputMessage"];
[filter setValue:@"H"forKey:@"inputCorrectionLevel"];
CIImage *outputImage = [filter outputImage];
return outputImage;

}

2.第二步:将原始图片的所有点的色值保存到二维数组

+(NSArray<NSArray >)getPixelsWithCIImage:(CIImage *)ciimg{
NSMutableArray *pixels = [NSMutableArrayarray];

CGImageRef imageRef = [selfconvertCIImage2CGImageForCIImage:ciimg];
CGFloat width = CGImageGetWidth(imageRef);
CGFloat height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsignedchar *rawData = (unsignedchar *)calloc(height * width * 4, sizeof(unsignedchar));
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = width * bytesPerPixel;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);
for (int indexY = 0; indexY < height; indexY++) {
    NSMutableArray *tepArrM = [NSMutableArrayarray];
    for (int indexX = 0; indexX < width; indexX++) {
        @autoreleasepool {
            NSUInteger byteIndex = bytesPerRow * indexY + indexX * bytesPerPixel;
            CGFloat alpha = (CGFloat)rawData[byteIndex + 3];
            CGFloat red = (CGFloat)rawData[byteIndex];
            CGFloat green = (CGFloat)rawData[byteIndex + 1];
            CGFloat blue = (CGFloat)rawData[byteIndex + 2];
            structJPIntPixel pixel;
            pixel.alpha = alpha;
            pixel.red = red;
            pixel.green = green;
            pixel.blue = blue;
            NSValue *value = [NSValuevalueWithBytes:&pixel objCType:@encode(structJPIntPixel)];
            [tepArrM addObject:value];
            byteIndex += bytesPerPixel;
        }
    }
    [pixels addObject:[tepArrM copy]];
}
free(rawData);
return [pixels copy];

}

3.第三步:判断每个点是否有颜色色值,截取有色值的点,重新创建数组

+(NSArray<NSArray >)handlePointsShouldDisplayCodeForArr:(NSArray<NSArray >)pixels{

NSMutableArray *results = [NSMutableArrayarrayWithCapacity:pixels.count];
for (int indexY = 0; indexY < pixels.count; indexY++) {
    NSMutableArray *tepArrM = [NSMutableArrayarrayWithCapacity:pixels[indexY].count];
    for (int indexX = 0; indexX < pixels[indexY].count; indexX++) {
        @autoreleasepool {
            NSValue *value = pixels[indexY][indexX];
            structJPIntPixel pixel;
            [value getValue:&pixel];
            BOOL shouldDisplay = pixel.red == 0 && pixel.green == 0 && pixel.blue == 0;
            [tepArrM addObject:@(shouldDisplay)];
        }
    }
    [results addObject:[tepArrM copy]];
}
return [results copy];

}

拿到具有信息量的点集合后,我们就可以自定义我们的二维码了

在此,我设置了kQRCodeSizeType枚举,用来标识点的大小

typedefNS_ENUM(NSInteger, kQRCodeSizeType) {
kQR_Size_Small=1,
kQR_Size_Normal,
kQR_Size_Big

};

设置了kQRCodeDrawType枚举,用来标识点的形状,其中加入了图标自定义

typedefNS_ENUM(NSInteger, kQRCodeDrawType) {
kQR_Draw_None=1,
kQR_Draw_Square, // 正方形
kQR_Draw_Circle, // 圆
kQR_Draw_Icon // 图标

};

设置了kQRCodeGradientType枚举,用来标识点渐变

typedefNS_ENUM(NSInteger, kQRCodeGradientType) {
kQR_Gradient_None=1, // 纯色
kQR_Gradient_Horizontal, // 水平渐变
kQR_Gradient_Diagonal, // 对角线渐变

};

下面我们来看效果:
这是一个正方形、对角线渐变的二维码

这是一个正方形、水平渐变的二维码

这是一个圆形、对角线渐变的二维码

还有图标组成的

欢迎下载源码,相互交流:https://git.oschina.net/VanCamp/wkqr.git
或者扫描二维码和我交流,蟹蟹O(∩_∩)O

相关文章

  • 个性化二维码设计

    二维码实际上就是字符串,用来记录信息的,由点组成,下面我们来构建个性化的二维码 1.第一步:创建原始二维码 +(C...

  • 【二维码生成器】在线生成艺术二维码,只需5分钟

    生活中处处会用到二维码,普通常见的就是黑白码,由于二维码的发展,个性化二维码越来越高,据统计艺术二维码比黑白二维码...

  • 软装

    采购模式:套餐模式,品牌代购,高端定制(高定)。个性化搭配设计, 个性化定制品牌故事及内涵软装设计=设计理念(概念...

  • 软装流程

    采购模式:套餐模式,品牌代购,高端定制(高定)。个性化搭配设计, 个性化定制品牌故事及内涵软装设计=设计理念(概念...

  • JWALL壁纸意大利个性壁纸,打造简约设计风格_意大利之家

    意大利JWALL壁纸优先采用个性化的设计以及不同寻常的设计原理打造人们喜欢的个性化设计,具有美学价值和独特性。意大...

  • web前端入门到实战:网页设计十大流行趋势

    1、个性化排版设计 最近看到越来越多的网络设计尝试个性化的风格,其中比较突出的一点是个性化字体的增多:用自己独特设...

  • 隐私政策

    二维码生成器尊重并保护所有使用二维码生成器网络服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,二维码生...

  • 灯光设计管家

    个性化灯光设计方案,详询GELED旗舰店。

  • 2020-02-06

    景区规划设计原则 1.个性化原则 个性化塑造的旅游项目的不可取代行,不可取代性才成了景区发展的核心竞争力。个性化设...

  • 教你轻松玩转排版设计(◆升阶篇·二维码设计)

    自从昨日给无戒老师做了个二维码设计后,很多简友都纷纷来问二维码是如何设计才会好看呢? 由于此次教程复杂各位,请把设...

网友评论

    本文标题:个性化二维码设计

    本文链接:https://www.haomeiwen.com/subject/egzmzttx.html