Я создаю 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
и изображения отображаются искаженными. Любые идеи о том, как я могу получить маленькое изображение в градациях серого?