如何从ios,swift中的字符串中获取高质量的条形码图像

时间:2017-03-07 09:06:41

标签: ios swift uiimage barcode

我使用下面的字符串生成带条形码的图像。

(function() {
    'use strict';
    angular
        .module('myApp')
        .factory('FileService', FileService);
    FileService.$inject = ['$resource', 'DateUtils'];
    function FileService($resource, DateUtils) {
        var resourceUrl =  'api/file/:id/generate';
        return $resource(resourceUrl, {}, {
            'get': {
                method: 'GET',
                responseType:'arraybuffer'
}});}})();

这样可以生成准确的图像。但质量很低。如何提高图像的质量。(我不能增加图像的大小,如果我这样做,它看起来很像模糊)

3 个答案:

答案 0 :(得分:2)

尝试transform使其更大

    let transform = CGAffineTransform(scaleX: 3, y: 3)

    if let output = filter.outputImage?.applying(transform) {
        return UIImage(ciImage: output)
    }

答案 1 :(得分:2)

CIImage转换为UIImage时,它会使用由CIImage确定的固定大小,如果您随后尝试将此图像缩放,请指定它到UIImageView,然后你会得到与放大位图相关的典型像素化。

在将图像分配给UIImage

之前对其进行变换
if let barImage = filter.outputImage {
    let transform = CGAffineTransformMakeScale(5.0, 5.0)
    let scaled = barImage.imageByApplyingTransform(transform)
    return(UIImage(CIImage: scaled))
}

答案 2 :(得分:0)

我为OSX支付2美分:)

func barCodeFromString(string : String) -> NSImage? {
    let data = string.data(using: .ascii)
    guard let filter = CIFilter(name: "CICode128BarcodeGenerator") else{
        return nil
    }

    filter.setValue(data, forKey: "inputMessage")
    guard let ciImage : CIImage = filter.outputImage else{
        return nil
    }

    let transform = CGAffineTransform(scaleX: 5.0, y: 5.0)
    let scaled = ciImage.transformed(by: transform)

    let rep = NSCIImageRep(ciImage: scaled)
    let nsImage = NSImage(size: rep.size)
    nsImage.addRepresentation(rep)
    return nsImage
}