我正在生成一个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
并且图像显示失真。关于如何获得小真实灰度图像的任何想法?