写本文的初衷:因为公司最近在研发自己的仓库管理系统,作为一个iOS屌丝,本来就不关事;但老大看我闲的蛋疼,就叫我去生成并打印一百多个仓库条形码,刚开始时候用网页的条形码生成工具生成,妈蛋!一百多个啊。。。一个一个生成,保存,你不知道对于程序员来说会死的!!所以打算用iOS写一个脚本,输入完条形码内容,一次性生成几十个条形码图片!

于是乎,开始了哥的网上大开搜。。。。。。。。。。。。。。。。

结论就是源码太少,解释更少啦!而且还没有条形码底部的文字说明!所以,就自己动手写咯!!!

实现:

一、生成条形码

直接上码啦:

func generateBarCode128(barCodeStr:String,barCodeSize:CGSize) ->UIImage? {//将传入的string转成nsstring,再编码let stringData = barCodeStr.dataUsingEncoding(NSUTF8StringEncoding)//系统自带能生成的码//        CIAztecCodeGenerator 二维码//        CICode128BarcodeGenerator 条形码//        CIPDF417BarcodeGenerator//        CIQRCodeGenerator     二维码let qrFilter = CIFilter(name: "CICode128BarcodeGenerator")qrFilter?.setDefaults()qrFilter?.setValue(stringData, forKey: "inputMessage")let outputImage:CIImage? = qrFilter?.outputImage/*生成的条形码需要对其进行消除模糊处理,本文提供两种方法消除模糊,其原理都是放大条码,但项目中需要在条码底部加上条码内容文字,使用其方法一会模糊并变小文字,所以使用方法二,需要各位去研究下原因哈。。。*/// 消除模糊方法一
//        let context = CIContext()
//        let cgImage = context.createCGImage(outputImage!, fromRect: outputImage!.extent)//        let image = UIImage(CGImage: cgImage, scale: 1.0, orientation: UIImageOrientation.Up)
//
//        // Resize without interpolating
//        let scaleRate:CGFloat = 20.0
//        let resized = resizeImage(addText(image), quality: CGInterpolationQuality.None, rate: scaleRate)// 消除模糊方法二let scaleX:CGFloat = barCodeSize.width/outputImage!.extent.size.width; // extent 返回图片的framelet scaleY:CGFloat = barCodeSize.height/outputImage!.extent.size.height;let resultImage = outputImage?.imageByApplyingTransform(CGAffineTransformScale(CGAffineTransformIdentity, scaleX, scaleY))let image = UIImage.init(CIImage: resultImage!)return addText(image,textName: barCodeStr);}

二、对生成的条形码加上文字

    //添加条形码下方文字func addText(image:UIImage,textName:String) ->UIImage{let size = CGSizeMake(image.size.width, image.size.height+30)UIGraphicsBeginImageContextWithOptions (size, false , 0.0 );image.drawAtPoint(CGPointZero)// 获得一个位图图形上下文
        let context = UIGraphicsGetCurrentContext ();CGContextDrawPath (context!, .Stroke );//绘制文字let barText:NSString = textNamelet textStyle = NSMutableParagraphStyle()textStyle.lineBreakMode = .ByWordWrappingtextStyle.alignment = .CenterbarText.drawInRect(CGRectMake(0, image.size.height-4, size.width, 30), withAttributes: [NSFontAttributeName:UIFont.systemFontOfSize(18.0),NSBackgroundColorAttributeName:UIColor.clearColor(),NSParagraphStyleAttributeName:textStyle])let image = UIGraphicsGetImageFromCurrentImageContext()UIGraphicsEndImageContext()return image}

三、最后一步:将加工过的条形码存入本地

//写入本地func writeToLocal(image:UIImage,imgName:String) {let path = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray).objectAtIndex(0)let filePath = "\(path)/\(imgName).jpeg"//            let fileurl = __stringToUrl(filePath)let imgData = UIImageJPEGRepresentation(image, 0)if imgData != nil {imgData!.writeToFile(filePath, atomically: true)print("写入成功!!")print("filePath=\(filePath)")}}

好了,方法都写好了,所以现在就用我们的代码生成几十张条形码吧!因为是将生成的条形码存入本地,所以跑这个应用需要用模拟器来跑,这样你就能用command+shift+G快捷键打开打印出来的文件路径啦!激动不?~~~

调用:

    override func viewDidLoad() {super.viewDidLoad()barCodeNameArray = ["SN00000000001","SN00000000002","SN00000000003","SN00000000005","SN00000000006","SN00000000007","SN00000000008","SN00000000009","SN000000000010","SN00000000011","SN00000000012","SN00000000013","SN00000000014","SN00000000015","SN00000000015","SN00000000016","SN00000000017","SN00000000018","SN00000000019"]for codeName in barCodeNameArray {//异步生成条形码,并保存到本地let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)dispatch_async(queue) {//生成条形码let image = self.generateBarCode128(codeName,barCodeSize: self.barCodeSize)if image != nil {self.writeToLocal(image!,imgName: codeName)}}}}

是不是很简单?不信?那你看我代码包:http://files.cnblogs.com/files/justAg/TestCreatBarCode.zip

转载于:https://www.cnblogs.com/justAg/p/5736967.html

iOS swift语言生成条形码,可一次性生成多个!并带文字相关推荐

  1. 33 个 2017 年必须了解的 iOS/swift 开源库第三方库

    本文翻译自Medium,原作者为 Paweł Białecki <img src="https://pic3.zhimg.com/v2-c786777447261347b0d9 ...

  2. PodfileKit将github上常见的iOS(Swift)第三方框架进行了汇总,并且将框架进行了分类,为用户管理第三方框架提供了方便。

    PodfileKit ======================== Easy Podfile ! PodfileKit将github上常见的iOS(Swift)第三方框架进行了汇总,并且将框架进行 ...

  3. IOS Swift 入门学习汇总 (更新中..)

    IOS Swift 学习入门 配置区 info 配置 本地化中文 文件导入Xcode CocoaPads 依赖管理工具 UI区 + 代码 通用 打开新页面方式 设置新开页面全屏展示 跳转页面 正向传值 ...

  4. ios swift 聊天_iOS Swift上的加密聊天

    ios swift 聊天 In this tutorial, we'll build encrypted chat on iOS using Swift. We'll combine Stream C ...

  5. ios swift请求框架_使用Swift在iOS中创建二进制框架

    ios swift请求框架 We all use a lot of frameworks in our daily development routine. We just type the magi ...

  6. IOS swift项目的单例模式.swift5以后的单例模式

    IOS swift项目的单例模式.swift5以后的单例模式 不能继承NSObject 第一种写法,最简单 class SoundTools{static let sharedInstance = S ...

  7. [iOS]利用Appicon and Launchimage Maker生成并配置iOSApp的图标和启动页

    一.先来研究下这个软件->Appicon and Launchimage Maker 首先打开你电脑上的AppStore,然后搜索:AppIcon 然后回车: 这里我们先使用免费版的点击下载.( ...

  8. ios swift 实现饼状图进度条,swift环形进度条

    ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/2 ...

  9. iOS Swift 使用 CLLocationManager 定位

    iOS Swift 使用 CLLocationManager 定位 CLLocationManager 是IOS 系统提供的定位对象,通过该对象可以获取定位信息,包括:经纬度.海拔.方向.速度.通过反 ...

最新文章

  1. LeetCode-笔记-48.旋转图像
  2. 查看 mysql 占用的内存大小_mysql查看数据库和表的占用空间大小
  3. pytroch 中Variable实现线性回归
  4. [FxCop.设计规则]13. 定义自定义属性参数的访问属性
  5. activemq jdbc mysql_activeMQ JDBC Master Slave
  6. 基于消息队列 RocketMQ 的大型分布式应用上云实践
  7. linux coreutils升级,Coreutils
  8. Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法
  9. MapReduce之RecordWriter理解
  10. 恢复系统管理员密码的五大奇招
  11. 刀片系统服务器优点,刀片服务器是什么?介绍ibm刀片服务器优点
  12. Spring(SpringBoot)--事务传播机制--应用/实例/详解
  13. 提取整数的各个位数 (Separating the Digits in an Integer)
  14. 手把手系列!大规模预训练语言模型
  15. QImage 图像格式小结,QImage::Format
  16. NAT(地址转换模式)
  17. 基于遗传算法解决柔性车间生产调度问题(附代码)
  18. 【蓝桥杯省赛真题22】Scratch列表算式 少儿编程scratch蓝桥杯省赛真题讲解
  19. 软件体系结构(2)———软件设计概论
  20. 看可口可乐公司是怎么玩转TensorFlow的?

热门文章

  1. cdate在java中_Java Calendar.add方法代码示例
  2. L2-011 玩转二叉树(建树+BFS)
  3. Spark(Hive)对字符串数值的排序
  4. HBaseRegionServer宕机数据恢复
  5. Python中zip函数
  6. [机器学习]机器学习常用的模型评估方法
  7. [Flink]Flink实时框架介绍
  8. 前端知识天天学(2)
  9. sumk 2.0.0 发布,轻量级互联网框架
  10. 《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——2.3 直接映射高速缓存...