Reputation: 1012
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:
PNG Resized image 1:
PNG Resized image 2:
Upvotes: 0
Views: 329
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