Управление качеством и размером UIImage с альфа-каналом - PullRequest
0 голосов
/ 30 мая 2019

У меня есть 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%, но это привело даже к самому большому размеру.

...