2016-05-13 2 views
-1

Я изменение размера и сохранения изображения в documents directory с помощью этих методовизменено размеры ширина и высота изображения не совпадает при сохранении в каталоге документов

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    UIImage *chosenImage = info[UIImagePickerControllerOriginalImage]; 

    CGSize reSize = [self imageResizeCalculationWithAspectRatio:chosenImage.size]; 

    UIImage *resizedImage = [self resizeImage:chosenImage withAspectRatio:reSize]; 

    [picker dismissViewControllerAnimated:YES completion:NULL]; 

    UIImageWriteToSavedPhotosAlbum(resizedImage, nil, nil, nil); 

    [self save:resizedImage]; 
} 


-(CGSize)imageResizeCalculationWithAspectRatio:(CGSize)originalSize { 
    float maxWidth = 2048; 
    float maxHeight = 2048; 
    float ratio = 0; 
    float width = originalSize.width; 
    float height = originalSize.height; 

    if(width > maxWidth) { 
     ratio = maxWidth/width; 
     height = height * ratio; 
     width = width * ratio; 
    } 

    if(height > maxHeight) { 
     ratio = maxHeight/height; 
     width = width * ratio; 
     height = height * ratio; 
    } 

    return CGSizeMake(width, height); 
} 

- (UIImage *)resizeImage:(UIImage*)image withAspectRatio:(CGSize)ratio { 
    CGRect scaledRect = AVMakeRectWithAspectRatioInsideRect(image.size, CGRectMake(0, 0, ratio.width, ratio.height)); 
    UIGraphicsBeginImageContextWithOptions(ratio, NO, 0); 
    [image drawInRect:scaledRect]; 
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return scaledImage; 
} 

-(void)save:(UIImage*)image { 
    NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"New Folder"]; 
    // New Folder is your folder name 
    NSError *error = nil; 
    if (![[NSFileManager defaultManager] fileExistsAtPath:stringPath]) 
     [[NSFileManager defaultManager] createDirectoryAtPath:stringPath withIntermediateDirectories:NO attributes:nil error:&error]; 

    NSString *fileName = [stringPath stringByAppendingFormat:@"/image.jpg"]; 
    NSData *data = UIImageJPEGRepresentation(image, 1.0); 
    [data writeToFile:fileName atomically:YES]; 
} 

Мои 11000 x 5000 dimension image A from gallery изменении размеров моих методов, как <UIImage: 0x12ea72490> size {2048, 931} orientation 0 scale 3.000000 НО сохранение в 6144 × 2793 dimension и 8.6 mb in size

Мой 720 x 480 dimension image B from gallery изменении размеров моих методов, как <UIImage: 0x12ea9a360> size {720, 480} orientation 0 scale 3.000000 НО сохранение в 2160 × 1440 dimension и 123 kb in size

Почему размеры изображения превышают размеры, рассчитанные моими методами, я хочу сохранить изображение в размерах, размер которых изменяется.

Как я могу это достичь?

+0

пожалуйста причина вниз голосования .... –

ответ

2

Ожидаемое поведение. Ваши изменения размера изображения имеет scale из 3. 3 раза 2048 х 931 является 6144 × 2793.

Если вы не хотите, чтобы ваше изменения размера изображения, чтобы иметь scale из 3, почему вы сказали

UIGraphicsBeginImageContextWithOptions(ratio, NO, 0); 

?? Вы работаете на экране с тройным разрешением, поэтому получаете изображение с тройным разрешением. Если это не то, что вы хотите, вы должны были сказать

UIGraphicsBeginImageContextWithOptions(ratio, NO, 1); 
+0

как не могу я исправить это –

+0

ничего, чтобы исправить. Двигаться дальше. – matt

+0

Мне нужен этот размер 2048 x 931 –