Сжимать размер файла изображения (iPhone)?

54
4

У меня есть простое приложение для iPhone, которое позволяет пользователю загружать изображения на сервер. Проблема в том, что если они загружают большой файл изображения. Я хочу ограничить его (до 200 КБ). Я начал что-то, но он, похоже, разбился в моей инструкции while.


Здесь код:


NSString *jpgPath = [NSString stringWithFormat:@"Documents/%@",sqlImageUploadPathTwo];
NSString *jpgPathTwo = [NSString stringWithFormat:@"./../Documents/%@",sqlImageUploadPathTwo];
NSString *yourPath = [NSHomeDirectory() stringByAppendingPathComponent:jpgPath];

NSLog(@"yourPath: %@", yourPath);

NSFileManager *man = [[NSFileManager alloc] init];
NSDictionary *attrs = [man attributesOfItemAtPath: yourPath error: NULL];
int *result = [attrs fileSize];
NSLog(@"Here the original size: %d", result);

NSLog(@"jpgPath: %@ // jpgPathTwo: %@", jpgPath, jpgPathTwo);

while (result > 9715) {
UIImage *tempImage = [UIImage imageNamed: jpgPath];
NSData *imageData = [NSData dataWithData:UIImageJPEGRepresentation(tempImage, 0.9)];
[imageData writeToFile:jpgPathTwo atomically:YES];
NSLog(@"just shrunk it once.");
}

NSLog(@"SIZE AFTER SHRINK: %@", result);


Спасибо!
Коултон

спросил(а) 2011-04-07T06:22:00+04:00 9 лет, 3 месяца назад
1
Решение
89

Что-то вроде этого:
(также обратите внимание, что вы объявили результат как int * (т.е. указатель), а не как число, а условие должно быть > , not < (иначе для больших файлов оно вообще не изменится). условие полезно, чтобы избежать бесконечного цикла (в основном делать это 5 раз, а затем прекратить делать это, независимо от размера).

NSFileManager *man = [[NSFileManager alloc] init];
NSDictionary *attrs = [man attributesOfItemAtPath: yourPath error: NULL];
int result = [attrs fileSize];
int count = 0;
while (result > 9715 && count < 5) {
UIImage *tempImage = [UIImage imageNamed: jpgPath];
NSData *imageData = [NSData dataWithData:UIImageJPEGRepresentation(tempImage, 0.9)];
[imageData writeToFile:jpgPathTwo atomically:YES];
NSDictionary *attrs = [man attributesOfItemAtPath: jpgPathTwo error: NULL];
result = [attrs fileSize];
count++;
NSLog(@"just shrunk it once.");
}

ответил(а) 2011-04-07T06:43:00+04:00 9 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема