2013-04-12 1 views
1

im используя этот код для изменения размера изображения.UIImage Resize с соотношением сторон -> SAVE JPG -> LOAD -> изображение загружено в два раза больше

- (UIImage*)resizeToSize:(CGSize)size { 

float height = self.size.height; 
float width  = self.size.width; 


if (width > size.width) { 
    width = size.width; 
    height = size.width/(self.size.width/self.size.height); 
} 

if (height > size.height) { 
    height = size.height; 
    width = size.height/(self.size.height/self.size.width); 
} 

NSLog(@"Resize to size %@",NSStringFromCGSize(size)); 

if (height == self.size.height && width == self.size.width) { 
    return self; 
}  
CGSize newSize = CGSizeMake(width, height); 

UIGraphicsBeginImageContextWithOptions(newSize, YES, 0.0); 

[self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
NSLog(@"Resized %@",NSStringFromCGSize(newImage.size)); 
return newImage; 
} 

Изображение изменяется и в следующем шаге я сохранить его с помощью [UIImageJPEGRepresentation (изображение, 1,0) WriteToFile: pngPath атомарно: ДА] ;.

После этого я загружаю файл, а размер изображения в два раза больше, любой подсказку почему?

Спасибо!

ответ

1

Я подозреваю, что происходит здесь в том, что у вас есть изображение с scale 2.0 (на устройстве Retina), но вы сохраните его без @2x в имени файла, так что при повторном открытии его, это scale 1,0 изображения с размерами в два раза больше, чем вы хотите.

Если это так, есть два решения: вы можете исправить свое имя файла, или вы можете повторно открыть файл, прочитав файл в объекте NSData, а затем воспользуйтесь UIImage +imageWithData:scale:, чтобы получить правильно масштабированное изображение.

+0

если я установил @ 2x в имени файла, будет ли он работать для отображения не сетчатки? Thx – Pion

+0

Нет. Перед изменением имени файла вам необходимо проверить масштаб изображения. –

Смежные вопросы