2013-03-07 3 views
0

У меня есть файл размером (например, 1000x1000).UIImage странное масштабирование

Я хочу, чтобы загрузить его и сделать его меньше

UIImage *newImage = [UIImage imageWithCGImage:[UIImage imageWithContentsOfFile:filename].CGImage scale:(1.0f/scale) orientation:UIImageOrientationUp]; 
NSLog(newImage size: %f, %f", newImage.size.width, newImage.size.height); 
// shows correct scaled size -> 50, 50 

Тогда я хочу, чтобы сохранить этот масштабируется изображение

NSData* imageData = UIImageJPEGRepresentation(newImage, 1.0); 
[imageData writeToFile:otherFileName atomically:NO]; 

я был смущен, чтобы увидеть, что новое изображение было сохранено с первого размера начальной (1000x1000).

Как это возможно и что с этим делать?

+0

Эти 4 оператора в одном методе? –

+0

Кажется, вам нужно знать, как масштабировать изображение. Возможный дубликат http://stackoverflow.com/questions/6703502/how-to-resize-an-uiimage-while-maintaining-its-aspect-ratio –

+0

Почему вы не используете 'NSData * imageData = UIImageJPEGRepresentation (newImage, 1.0f/scale); 'как вы это делаете на первом шаге? – pmk

ответ

2

Просто сделайте один метод:

-(UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)newSize { 

    float width = newSize.width; 
    float height = newSize.height; 

    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); 
    [image drawInRect: CGRectMake(0, 0, width, height)]; 

    UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return smallImage; 
} 

И установите требуемые размеры:

UIImage *resizedImg = [self scaleImage:[UIImage imageWithData:imageData] toSize:CGSizeMake(150.0f,150.0f)]; // i have taken 150 you can change value here 
1

вы можете создать изображение с меньшим размером witout царапанию изображение Использование Пыльник метода: -

вы можете называемый сильфона метод, как: -

newImage=[self scaleImage:newImage toSize:CGSizeMake(250, 250)]; 


- (UIImage*) scaleImage:(UIImage*)image toSize:(CGSize)newSize { 
    CGSize scaledSize = newSize; 
    float scaleFactor = 2.0; 
    if(image.size.width > image.size.height) { 
     scaleFactor = image.size.width/image.size.height; 
     scaledSize.width = newSize.width; 
     scaledSize.height = newSize.height/scaleFactor; 
    } 
    else { 
     scaleFactor = image.size.height/image.size.width; 
     scaledSize.height = newSize.height; 
     scaledSize.width = newSize.width/scaleFactor; 
    } 

    UIGraphicsBeginImageContextWithOptions(scaledSize, NO, 0.0); 
    CGRect scaledImageRect = CGRectMake(0.0, 0.0, scaledSize.width, scaledSize.height); 
    [image drawInRect:scaledImageRect]; 
    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return scaledImage; 
} 
Смежные вопросы