2017-08-21 1 views
0

J'ai passé en revue et appliqué beaucoup de référence pour redimensionner l'image avec la même qualité mais pas capable d'obtenir.Comment obtenir une image redimensionnée avec une qualité comme iOS original?

Je suis en mesure d'obtenir l'image de UIView et redimensionner avec le code comme indiqué ci-dessous: -

- (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; 
} 

taille de l'image PNG: {750, 1334}

deux images que je reçois de l'image PNG après le redimensionnement est {375, 667}. Ce qui est correct selon mes exigences.

Toutefois, la qualité des deux images redimensionnées est inférieure à celle de l'image PNG d'origine. Je peux reconnaître que le bouton, les icônes et les textes sont flous.

Comment puis-je résoudre ce problème. S'il vous plaît aider, merci d'avance.

J'ai besoin de redimensionner l'image avec la même qualité que l'image PNG.

image PNG:

enter image description here

image PNG redimensionnée 1:

enter image description here

image PNG redimensionnée 2:

enter image description here

+0

il devrait être vers le bas vous compressez et redimensionnez à l'affichage non de la rétine –

+0

lorsque vous souhaitez afficher l'image et sa taille est doublée {750, 1334} vous pouvez afficher par cette UIImage * img = {750, 1334} .; img = [UIImage imageWithCGImage: img.CGImage échelle: 2 orientation: img.imageOrientation]; –

+0

Mon souci n'est pas de l'afficher. Mon exigence est d'enregistrer dans le rouleau de la caméra avec la moitié de la taille de l'image originale avec la même qualité. –

Répondre

0

Redimensionner avec une bonne qualité

- (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; 

    } 
+0

Merci mais c'est aussi flou. Pas la même qualité. –

+0

ne peut pas être la même qualité du tout –