먼저, 출처는 다음 기사입니다.
iPhone 사진앨범의 특징은 가로나 세로가 긴 이미지라 할지라도,
정사각형으로 사진을 CROP 하고, 썸네일 크기에 맞게 리사이즈 시킵니다.
위의 기사의 내용을 나름대로 보기 편하게(?) 수정을 했습니다.
함수명 - makeThumbnailImage
파라미터 - 원본 이미지, 리사이즈없이 CROP만 할지 여부, 리사이즈할 정사각형 한변의 길이
리턴값 - CROP 및 리사이즈된 이미지
- (UIImage*) makeThumbnailImage:(UIImage*)image onlyCrop:(BOOL)bOnlyCrop Size:(float)size
{
CGRect rcCrop;
if (image.size.width == image.size.height)
{
rcCrop = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
}
else if (image.size.width > image.size.height)
{
int xGap = (image.size.width - image.size.height)/2;
rcCrop = CGRectMake(xGap, 0.0, image.size.height, image.size.height);
}
else
{
int yGap = (image.size.height - image.size.width)/2;
rcCrop = CGRectMake(0.0, yGap, image.size.width, image.size.width);
}
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rcCrop);
UIImage* cropImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
if (bOnlyCrop) return cropImage;
NSData* dataCrop = UIImagePNGRepresentation(cropImage);
UIImage* imgResize = [[UIImage alloc] initWithData:dataCrop];
UIGraphicsBeginImageContext(CGSizeMake(size,size));
[imgResize drawInRect:CGRectMake(0.0f, 0.0f, size, size)];
UIImage* imgThumb = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[imgResize release];
return imgThumb;
}
위 소스를 참고하시면, 이미지를 CROP 하는 방법이나, 이미지를 RESIZE 하는 방법을 참고하실수 있을겁니다.
사족을 붙이자면, 왜 Resize 할지 여부를 따로 분리 시킨 이유는 실제로 사용을 해보면 Resize 루틴에서
많은 CPU 부하가 걸립니다. 그래서 UIImageView 에 contentMode를 UIViewContentModeScaleAspectFit 로 설정해서
자체적으로 리사이즈를 하게 하는 방법이 비동기적으로 괜찮습니다. (물론.. 실제 Resize된 이미지가 아니므로 메모리적인 소비는 있습니다.)
많은 도움 되셨으면 좋겠네요 ^^
'iOS' 카테고리의 다른 글
[iOS] Stretchable Image를 이용해 App. Size를 줄여보자. (0) | 2011.02.12 |
---|---|
How to popToViewController to a particular Controller or index value of that Controller. (0) | 2011.02.11 |
트위터 api (0) | 2011.01.27 |
[IPHONE API 분석 : NSDateFormatter] 시간관련 - 시간 출력하기 (0) | 2011.01.26 |
iPhone NSDictionary 와 Array 와 Plist(XML) 파일의 구조 (0) | 2011.01.26 |