通过使其成为灰度来减少UIImage的大小

时间:2017-10-21 19:24:37

标签: ios swift uiimage ciimage

我正在生成一个PDF,其中包含10到15张用户拍摄的图像。图像是文档的照片,不需要着色。 如果我只使用用户使用的UIImages,并使用非常高的压缩率

UIImageJPEGRepresentation(image, 0.02)

iPhone6上的PDF约为3MB(彩色图像)。

为了进一步减小文件大小,我现在想将所有图像转换为真灰度(我想丢弃颜色信息)。我也found this on github

  

请注意,iOS / macOS不支持带alpha的灰度(你必须使用RGB图像,所有3个设置为相同的值+ alpha才能产生这种影响)。

我正在将图像转换为灰度图像:

guard let cgImage = self.cgImage else {
    return self
}

let height = self.size.height
let width = self.size.width
let colorSpace = CGColorSpaceCreateDeviceGray();
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue)
let context = CGContext.init(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)!
let rect = CGRect(x: 0, y: 0, width: width, height: height)

context.draw(cgImage, in: rect)
guard let grayscaleImage = context.makeImage() else {
   return self
}
return UIImage(cgImage: grayscaleImage)

但是,当我尝试使用

再次压缩生成的图像时
UIImageJPEGRepresentation(image, 0.02)

我得到了以后的日志:

  

JPEGDecompressSurface:图片解码失败:e00002c2

并且图像显示失真。关于如何获得小真实灰度图像的任何想法?

0 个答案:

没有答案