https://blog.csdn.net/feng512275/article/details/82824650

2018年09月23日 20:29:45 筝风放风筝 阅读数:91
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Feng512275/article/details/82824650

背景

物联网技术这门课程的老师让我们做一个二维码出来,二维码的内容包括:学号、姓名,并且加上一张图片。这不是和微信的二维码很像吗?开发语言当然是首选我喜欢的Objective-C啦~~~


实现目标

  1. 生成二维码
  2. 二维码的信息包括学号、姓名
  3. 二维码需要加入图片

实现

  1. 导入<CoreImage/CoreImage.h>
  2. 实现代码

代码部分

//
// ViewController.m
// QRCode
//
// Created by HZhenF on 2018/9/23.
// Copyright © 2018年 HZhenF. All rights reserved.
//

#import "ViewController.h"
#import <CoreImage/CoreImage.h>
#define screenW [UIScreen mainScreen].bounds.size.width
#define screenH [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

@property(nonatomic,strong) UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

CGFloat imgW = screenW * 0.5;
CGFloat imgH = imgW;
CGFloat imgX = (screenW - imgW)/2;
CGFloat imgY = (screenH - imgW)/2;
CGRect imgRect = {imgX,imgY,imgW,imgH};
self.imageView = [[UIImageView alloc] initWithFrame:imgRect];
self.imageView.backgroundColor = [UIColor redColor];
[self.view addSubview:self.imageView];

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 1. 创建一个二维码滤镜实例(CIFilter)
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
// 滤镜恢复默认设置
[filter setDefaults];

// 2. 给滤镜添加数据
NSString *string = @"学号:3180807001 \n 姓名:黄振锋";
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
// 使用KVC的方式给filter赋值
[filter setValue:data forKeyPath:@"inputMessage"];

// 3. 生成二维码
CIImage *image = [filter outputImage];

//4.在中心增加一张图片
UIImage *img = [self createNonInterpolatedUIImageFormCIImage:image withSize:screenW];

//5.把中央图片划入二维码里面
//5.1开启图形上下文
UIGraphicsBeginImageContext(img.size);
//5.2将二维码的图片画入
[img drawInRect:CGRectMake(0, 0, img.size.width, img.size.height)];
UIImage *centerImg = [UIImage imageNamed:@"HZhenF"];
CGFloat centerW=img.size.width*0.3;
CGFloat centerH=centerW;
CGFloat centerX=(img.size.width-centerW)*0.5;
CGFloat centerY=(img.size.height -centerH)*0.5;
[centerImg drawInRect:CGRectMake(centerX, centerY, centerW, centerH)];
//5.3获取绘制好的图片
UIImage *finalImg=UIGraphicsGetImageFromCurrentImageContext();
//5.4关闭图像上下文
UIGraphicsEndImageContext();

//6.显示最终二维码
self.imageView.image = finalImg;
}

/**
* 调用该方法处理图像变清晰
* 根据CIImage生成指定大小的UIImage
*
* @param image CIImage
* @param size 图片宽度以及高度
*/
- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size
{
CGRect extent = CGRectIntegral(image.extent);
CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));

//1.创建bitmap;
size_t width = CGRectGetWidth(extent) * scale;
size_t height = CGRectGetHeight(extent) * scale;
CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
CGContextScaleCTM(bitmapRef, scale, scale);
CGContextDrawImage(bitmapRef, extent, bitmapImage);

//2.保存bitmap到图片
CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);
return [UIImage imageWithCGImage:scaledImage];
}

@end

iOS-带图片的二维码的生成(QRCode)的更多相关文章

  1. Flutter生成带图片的二维码

    现在的APP中经常需要用自己的信息生成一个二维码给别人扫,下面就介绍一下Flutter中怎么生成一个带图片的二维码. 需要用到的插件qr_flutter 首先在 pubspec.yaml 文件中添加以 ...

  2. Android生成带图片的二维码

    一.问题描述 在开发中需要将信息转换为二维码存储并要求带有公司的logo,我们知道Google的Zxing开源项目就很好的帮助我们实现条形码.二维码的生成和解析,但带有logo的官网并没有提供demo ...

  3. 使用原生javaScript绘制带图片的二维码---js

    使用链接生成二维码主要是使用qr.js或者其他,把链接转化为二维码的形式,在使用canvas时需要设置画布的尺寸,生成的颜色. <div class="qr_code"> ...

  4. Android使用ZXing生成带图片的二维码

    效果图如下: 制作过程很简单的就是在原始的二维码图片上添加一个logn图标,代码的注释写得很详细,也就不给大家啰嗦了 package com.example.day44_02_qrcodewithlo ...

  5. 使用zxing生成彩色或带图片的二维码

    <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <group ...

  6. C#生成带logo的二维码

    带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码. 生成的二维码效果如下: 下面直接贴出二维码生成类   QRCode ...

  7. C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)

    1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...

  8. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  9. 带logo图片或不带logo图片的二维码生成与解析,亲测成功

    最近公司需要实现二维码功能,本人经过一顿百度,终于实现了,因有3个功能:不带logo图片.带logo图片.解析二维码,篇幅较长,请耐心读之,直接复制粘贴即可. 前提:myeclipse10:jar包: ...

随机推荐

  1. js 3d图形

    使用Three.js在网上中进行3D图形的展示 Three.js的官网https://threejs.org/ 第一个Demo,生成一个旋转的正方体 <style> canvas { wi ...

  2. c/c++ 数组的智能指针 使用

    数组的智能指针 使用 数组的智能指针的限制: 1,unique_ptr的数组智能指针,没有*和->操作,但支持下标操作[] 2,shared_ptr的数组智能指针,有*和->操作,但不支持 ...

  3. 挂载KVM Guest操作系统磁盘

    使用虚拟机时, 发现想要修改虚拟机中的文件非常麻烦, 需要启动虚拟机, 然后再登录进去修改. 对于已经关闭的虚拟机, 为了修改一个文件而启动, 非常耽误时间. 对于一个无法启动的虚拟机(比如启动文件损 ...

  4. android开发——用户头像

    最近,小灵狐得知了一种能够加快修炼速度的绝世秘法,那便是修炼android神功.小灵狐打算用android神功做一个app,今天他的修炼内容就是头像功能.可是小灵狐是个android小白啊,所以修炼过 ...

  5. python 基本运算符

    一.格式化输出 简易名片的制作 name="小龙女" phone=15464623646 firm="神雕侠侣" pro="神仙姐姐" pr ...

  6. 【Teradata System】How Teradata uses MPP Systems

    内存分配 内存初始化时将分配给操作系统和Vprocs,内存不使用部分的90%做为FSG (File Segment Cache) ,由PDE对FSG进行管理. FSG Cache:缓存常驻内存的dat ...

  7. 上传--spring-boot

    <dependency>   <groupId>commons-fileupload</groupId>   <artifactId>commons-f ...

  8. Kafka如何删除topic?

    Kafka如何删除topic? 今天为大家带来“Kafka删除topic原理解析”,希望可以帮到那些苦于无法删除topic的朋友们. 前提条件: 在启动broker时候开启删除topic的开关,即在s ...

  9. Fiddler抓包学习

    今天看到一个抓包笔记, 因为是老早抓包的需求, 后期不用就忘了, 换电脑桌面软件图标都没了, 点开看了一下一脸懵逼... 这是啥...  以后有需要在看一遍吧! Fiddler抓包使用教程-扫盲篇 h ...

  10. 路飞学城-Python开发集训-第2章

    学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...