сжать UIImage, но сохранить размер - PullRequest
4 голосов
/ 13 ноября 2011

Я пытаюсь использовать UIImageView, чтобы показать фотографию. Но Фото иногда бывает немного большим, и я хочу сжать его. Но я бы хотел сохранить его размер. Например, фотография 4M и имеет размер 320X480. И я хочу сжать его, и он может иметь размер 1M, но все еще имеет размер 320X480.

спасибо! * * 1004

Ответы [ 2 ]

18 голосов
/ 13 ноября 2011

Сжатие с использованием сжатия JPEG.

lowResImage = [UIImage imageWithData:UIImageJPEGRepresentation(highResImage, quality)];

Где качество от 0,0 до 1,0

Вы должны прочитать документацию UIImage , там все объяснено ...

3 голосов
/ 19 апреля 2014

Если ваша цель - получить изображение ниже определенной длины данных, сложно угадать, какой коэффициент сжатия вам нужен, если только вы не знаете, что исходное изображение всегда будет иметь определенную длину данных.Вот простой итеративный подход, который использует сжатие JPEG для достижения целевой длины ... скажем, 1 МБ, чтобы соответствовать вопросу:

// sourceImage is whatever image you're starting with

NSData *imageData = [[NSData alloc] init];
for (float compression = 1.0; compression >= 0.0; compression -= .1) {
    imageData = UIImageJPEGRepresentation(sourceImage, compression);
    NSInteger imageLength = imageData.length;
    if (imageLength < 1000000) {
        break;
    }
}
UIImage *finalImage = [UIImage imageWithData:imageData];

Я видел некоторые подходы, которые используют цикл while для сжатияизображение на 0,9 или меньше, пока не будет достигнут целевой размер, но я думаю, что вы потеряете качество изображения и циклы процессора, если будете последовательно сжимать / восстанавливать изображение.Кроме того, цикл for здесь немного безопаснее, потому что он останавливается автоматически после попытки максимально возможного сжатия (ноль).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...