Asif Raza
Asif Raza

Reputation: 1012

How to get resized image with quality as original iOS?

I have reviewed and applied many reference to resize image with same quality but not able to get.

I am able to get image from UIView and resize with code as mentioned below: -

- (UIImage *)imageWithView:(UIView *)view {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    NSData* imageData =  UIImagePNGRepresentation(image);
    UIImage* pngImage = [UIImage imageWithData:imageData];
    UIImageWriteToSavedPhotosAlbum(pngImage, nil, nil, nil); // PNG image size: {750, 1334}
    NSLog(@"PNG Image Size: %@", pngImage);


    CGSize size = CGSizeMake(375, 667);
    [self imageWithImage1:pngImage scaledToSize:size];
    [self imageWithImage2:pngImage scaledToSize:size];

    return image;
}

- (UIImage *)imageWithImage1:(UIImage *)image scaledToSize:(CGSize)newSize
{
    UIGraphicsBeginImageContext(newSize);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    NSData* imageData1 =  UIImagePNGRepresentation(newImage);
    UIImage* scaledImage1 = [UIImage imageWithData:imageData1];
    UIImageWriteToSavedPhotosAlbum(scaledImage1, nil, nil, nil); // PNG Resized image 1 size: {375, 667}
    NSLog(@"PNG Scaled Image Size: %@", scaledImage1);

    return newImage;
}

-(UIImage *)imageWithImage2:(UIImage*)image scaledToSize:(CGSize)newSize
{
    // Create a bitmap context.
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 1);
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    NSData* imageData1 =  UIImagePNGRepresentation(newImage);
    UIImage* scaledImage1 = [UIImage imageWithData:imageData1];
    UIImageWriteToSavedPhotosAlbum(scaledImage1, nil, nil, nil); // PNG Resized image 2 size: {375, 667}
    NSLog(@"PNG Scaled Image Size: %@", scaledImage1);

    return newImage;
}

PNG image size: {750, 1334}

Both image I am getting from PNG image after resizing is {375, 667}. Which is correct as per my requirement.

But the quality of both resized image is down from original PNG image. I can recognise that button, icons and texts are blurry.

How can I fix it. Please help, thanks in advance.

I need resized image with same the quality as PNG image.

PNG image:

enter image description here

PNG Resized image 1:

enter image description here

PNG Resized image 2:

enter image description here

Upvotes: 0

Views: 329

Answers (1)

Abdelahad Darwish
Abdelahad Darwish

Reputation: 6067

Resize with Good Quality

 - (UIImage *)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
    {
        // Create a bitmap context.
        UIGraphicsBeginImageContextWithOptions(newSize, YES, image.scale);
        [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;

    }

Upvotes: 0

Related Questions