Как уменьшить качество/размер изображения в iPhone objective-c?
У меня есть приложение, которое позволяет пользователю делать снимок с помощью своего iPhone и использовать его в качестве фонового изображения для приложения. Я использую UIImagePickerController
, чтобы позволить пользователю сделать снимок и установить фоновое изображение UIImageView
на возвращаемый объект UIImage
.
IBOutlet UIImageView *backgroundView;
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
backgroundView.image = image;
[self dismissModalViewControllerAnimated:YES];
}
Все это прекрасно работает.
Как уменьшить размер UIImage
до 480x320, чтобы приложение могло эффективно работать с памятью?
Меня не волнует, если я потеряю качество изображения.
Спасибо заранее.
Ответы
Ответ 1
Вы можете создать графический контекст, нарисовать изображение в нужном масштабе и использовать возвращаемое изображение. Например:
UIGraphicsBeginImageContext(CGSizeMake(480,320));
CGContextRef context = UIGraphicsGetCurrentContext();
[image drawInRect: CGRectMake(0, 0, 480, 320)];
UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Ответ 2
Я знаю, что этот вопрос уже решен, но если кто-то (как и я) хочет масштабировать изображение, сохраняя пропорции, этот код может быть полезен:
-(UIImage *)resizeImage:(UIImage *)image toSize:(CGSize)size
{
float width = size.width;
float height = size.height;
UIGraphicsBeginImageContext(size);
CGRect rect = CGRectMake(0, 0, width, height);
float widthRatio = image.size.width / width;
float heightRatio = image.size.height / height;
float divisor = widthRatio > heightRatio ? widthRatio : heightRatio;
width = image.size.width / divisor;
height = image.size.height / divisor;
rect.size.width = width;
rect.size.height = height;
if(height < width)
rect.origin.y = height / 3;
[image drawInRect: rect];
UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return smallImage;
}
Ответ 3
Используйте contentOfFile и убедитесь, что все ваши изображения -.png. Apple оптимизирована для png.
О, используйте метод contentOfFile, а не метод imageName. Несколько причин для этого. Изображения, которые записываются в память с помощью ImageName, остались в памяти даже после вызова [release].
Не спрашивай меня почему. Яблоко так мне сказал.
Ройделл Кларк