Уменьшите размер UIImage, сделав его в оттенках серого
Я генерирую PDF
с 10 до 15 изображений, которые сделал пользователь. Изображения являются фотографиями документов и не должны быть цветными. Если я просто использую UIImages
пользователь взял и использует очень высокую степень сжатия
UIImageJPEGRepresentation(image, 0.02)
PDF
около 3MB
(Ведьма цветные изображения) на iPhone6.
Чтобы еще больше уменьшить размер файла, я бы хотел преобразовать все изображения в истинные оттенки серого (я хочу выбросить информацию о цвете). Я также нашел это на GitHub
Обратите внимание, что iOS/macOS не поддерживают оттенки серого с альфа-каналом (для получения этого эффекта необходимо использовать изображение RGB со всеми тремя, установленными на одно и то же значение + альфа).
Я конвертирую изображения в оттенки серого следующим образом:
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
и изображения отображаются искаженными. Любые идеи о том, как я могу получить маленькое истинное изображение в градациях серого?