2011-04-21 5 views
1

실제로 이미지 크기를 조정하는 두 가지 방법을 사용했지만 내 클라이언트는 이미지 품질이 매우 좋지 않아 이미지 크기 조정에 가장 적합한 방법을 알고 싶다고 말합니다. 방금 ​​스크린 샷을 찍어서 480x320 크기의 UIImage 스크린 샷을 다음 기능에 보냅니다.이미지의 품질을 잃지 않고 크기를 조정하는 가장 좋은 방법은 무엇입니까?

- (UIImage *)makeResizedImage:(CGSize)newSize quality:(CGInterpolationQuality)interpolationQuality image:(UIImage *)inImage{ 
    NSLog(@"OriginalImage%f",inImage.size.width); 

    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height)); 

    CGImageRef imageRef = [inImage CGImage]; 
    // Compute the bytes per row of the new image 
    size_t bytesPerRow = CGImageGetBitsPerPixel(imageRef)/CGImageGetBitsPerComponent(imageRef) * newRect.size.width; 
    bytesPerRow = (bytesPerRow + 15) & ~15; // Make it 16-byte aligned 

    // Build a bitmap context that's the same dimensions as the new size 
    CGContextRef bitmap = CGBitmapContextCreate(NULL, 
               newRect.size.width, 
               newRect.size.height, 
               CGImageGetBitsPerComponent(imageRef), 
               bytesPerRow, 
               CGImageGetColorSpace(imageRef), 
               CGImageGetBitmapInfo(imageRef)); 

    CGContextSetInterpolationQuality(bitmap, interpolationQuality); 

    // Draw into the context; this scales the image 
    CGContextDrawImage(bitmap, newRect, imageRef); 

    // Get the resized image from the context and a UIImage 
    CGImageRef resizedImageRef = CGBitmapContextCreateImage(bitmap); 
    UIImage *resizedImage = [UIImage imageWithCGImage:resizedImageRef]; 
    NSLog(@"ResizedImage%f",resizedImage.size.width); 
    NSLog(@"ResizedImage%f",resizedImage.size.height); 

    // Clean up 
    CGContextRelease(bitmap); 
    CGImageRelease(resizedImageRef); 

    return resizedImage; 
} 

또는

- (UIImage *)resizedImage:(CGSize)newSize 
       transform:(CGAffineTransform)transform 
      drawTransposed:(BOOL)transpose 
    interpolationQuality:(CGInterpolationQuality)quality { 
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height)); 
    CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width); 
    CGImageRef imageRef = self.CGImage; 

    // Build a context that's the same dimensions as the new size 
    CGContextRef bitmap = CGBitmapContextCreate(NULL, 
               newRect.size.width, 
               newRect.size.height, 
               CGImageGetBitsPerComponent(imageRef), 
               0, 
               CGImageGetColorSpace(imageRef), 
               CGImageGetBitmapInfo(imageRef)); 

    // Rotate and/or flip the image if required by its orientation 
    CGContextConcatCTM(bitmap, transform); 

    // Set the quality level to use when rescaling 
    CGContextSetInterpolationQuality(bitmap, quality); 

    // Draw into the context; this scales the image 
    CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef); 

    // Get the resized image from the context and a UIImage 
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap); 
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef]; 

    // Clean up 
    CGContextRelease(bitmap); 
    CGImageRelease(newImageRef); 

    return newImage; 
} 

+0

그들은 어떻게 잃고 품질 : 여기

는 하나? 픽셀 화, 흐려짐, 늘이기 또는 다른 것? – blindjesse

답변

1

당신은 라이브러리를 통합하는 대신 자신의 압연 시도 할 수 있습니다 품질 손실없이 이미지의 크기를 조절하는 다른 방법이 알려주십시오. http://code.google.com/p/simple-iphone-image-processing/

+0

친절한 도움을 주신 고맙습니다. –

관련 문제