Necesito ayuda para cambiar el tamaño de una UIImage.

Por ejemplo: estoy mostrando una gran cantidad de imágenes en un UICollection Vista, pero con el tamaño de las imágenes es de 2 a 4 MB. Necesito comprimir o cambiar el tamaño de las imágenes.

He encontrado esto: Cómo comprimir/cambiar el tamaño de la imagen en el iPhone OS SDK antes de subir a un servidor? pero no entiendo cómo implementarlo.

Sería de gran ayuda si usted proporciona algo de código mostrando lo que he probado hasta ahora.
Si usted quiere abordar el uso de la memoria cuando tu colección tiene muchas imágenes abiertas al mismo tiempo, entonces usted quiere centrarse en el cambio de tamaño, no de compresión (debido a la compresión afecta la persistencia de la memoria de almacenamiento, no el uso de la memoria). Este es un cambio de tamaño de rutina que yo uso: stackoverflow.com/a/10491692/1271826
el aceptó la respuesta no coincide con el título, pero no las preguntas de texto …

OriginalEl autor user2868048 | 2013-12-04

4 Comentarios

  1. 17

    No muy seguro de si desea cambiar el tamaño o comprimir o ambos.

    Siguiente es el código para que sólo compresión :

    Uso La Compresión JPEG en dos sencillos pasos:

    1) Convertir UIImage a NSData

    UIImage *rainyImage =[UImage imageNamed:@"rainy.jpg"];
    NSData *imgData= UIImageJPEGRepresentation(rainyImage,0.1 /*compressionQuality*/);

    esta es la compresión con pérdida y el tamaño de la imagen se reduce.

    2) volver a Convertir a UIImage;

    UIImage *image=[UIImage imageWithData:imgData];

    Para el escalado puede utilizar la respuesta proporcionada por Matteo Gobbi. Pero de escala puede no ser la mejor alternativa. Usted tendría preferiría tener una miniatura de la imagen real por compresión, ya que el escalado puede hacer que mirar a su mala imagen en una pantalla de retina del dispositivo.

    Este look es perfecto 🙂

    OriginalEl autor Kunal Balani

  2. 3

    Escribí esta función a la escala de una imagen:

    - (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)newSize {
        CGSize actSize = image.size;
        float scale = actSize.width/actSize.height;
    
        if (scale < 1) {
            newSize.height = newSize.width/scale;
        } else {
            newSize.width = newSize.height*scale;
        }
    
    
        UIGraphicsBeginImageContext(newSize);
        [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        return newImage;
    }

    El uso es fácil, por ejemplo:

    [self scaleImage:yourUIImage toSize:CGMakeSize(300,300)];

    OriginalEl autor Matteo Gobbi

  3. 3
    lowResImage = [UIImage imageWithData:UIImageJPEGRepresentation(highResImage, quality)];

    OriginalEl autor user3358463

  4. 0
     -(UIImage *) resizeImage:(UIImage *)orginalImage resizeSize:(CGSize)size
     {
    CGFloat actualHeight = orginalImage.size.height;
    CGFloat actualWidth = orginalImage.size.width;
    
    float oldRatio = actualWidth/actualHeight;
    float newRatio = size.width/size.height;
    if(oldRatio < newRatio)
    {
        oldRatio = size.height/actualHeight;
        actualWidth = oldRatio * actualWidth;
        actualHeight = size.height;
    }
    else
    {
        oldRatio = size.width/actualWidth;
        actualHeight = oldRatio * actualHeight;
        actualWidth = size.width;
    }
    
    CGRect rect = CGRectMake(0.0,0.0,actualWidth,actualHeight);
    UIGraphicsBeginImageContext(rect.size);
    [orginalImage drawInRect:rect];
    orginalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return orginalImage;
     }
          //this image you can add it to imageview.....  

    OriginalEl autor mahesh chowdary

Dejar respuesta

Please enter your comment!
Please enter your name here