Сжимать размер файла изображения (iPhone)? - PullRequest
1 голос
/ 07 апреля 2011

У меня есть простое приложение для 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's 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);

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

1 Ответ

4 голосов
/ 07 апреля 2011

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

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.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...