У меня есть UIView с UIImageViews и UILabels, которые я должен захватить в изображение, а затем экспортировать в фотогалерею. Изображение имеет фиксированный размер в пикселях и должно иметь альфа-канал, поскольку фоновый цвет UIView чистый.
Теперь я использую UIGraphicsBeginImageContextWithOptions с renderInContext или drawViewHierarchyInRect, затем я изменяю размер изображения до заданного размера и сохраняю его с помощью UIImagePNGRepresentation. Это работает - я получаю UIImage с точным размером пикселя, который мне нужен, с альфа-каналом, сохраненным в галерее.
UIGraphicsBeginImageContextWithOptions(_templateView.bounds.size, NO, 0.0);
[_templateView drawViewHierarchyInRect:_templateView.bounds afterScreenUpdates:NO];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsBeginImageContext(CGSizeMake(1080.0f, 1080.0f));
[img drawInRect:CGRectMake(0, 0, 1080.0f, 1080.0f)];
img = UIGraphicsGetImageFromCurrentImageContext();
NSData *pngImageData = UIImagePNGRepresentation(img);
Проблема в размере получаемого изображения. Это намного больше, чем ожидалось. Когда я добавляю только один UIImageView (заполнение родительского UIView) с изображением 1.2Mb. результаты захвата составляют 1,65 Мб. Это очень важно, потому что у меня есть предельный размер изображения. Как я могу уменьшить его размер? Можно ли снизить качество такого изображения с помощью альфа-канала?
Я попытался изменить его размер до 50%, а затем снова до 100%, но это привело даже к самому большому размеру.