2012-02-03 64 views
1

我正在創建具有不同大小縮略圖的圖像庫。我想將這些矩形縮略圖轉換爲方形大小,以使它們的大小看起來都相似。我不介意從擴展部分中裁剪它,但我不知道如何去做。誰能幫幫我嗎?使用目標將矩形圖像轉換爲方形圖像c

感謝
潘卡

+0

這將有助於 - http://stackoverflow.com/questions/4789067/iphone-mask-uiimageview-of-differing-dimensions-into-square-dimension – 2012-02-03 09:17:53

+0

實際上並不*創建*縮略圖,只是使它看起來像一個... – 2012-02-03 09:19:16

回答

5

您需要使用圖像中的矩形方法通過圖像和所需的邊界在...

CGImageRef imageRef = CGImageCreateWithImageInRect([anImage CGImage], requiredBounds); 
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef); 

我已經加入這個一個UIImage類(UIImage的+你可以下載源代碼 - Categories example

+0

謝謝西蒙,你的代碼幫助我解決了我的問題 – pankaj 2012-02-03 09:48:38

0

那麼,如果你使用UIImageView來顯示你的圖像(至少我確信你可以),你可以將其設置爲contentMode財產至UIViewContentModeScaleAspectFill。這應該「裁​​剪」你的圖像到你的UIImageView的邊界。如果您的圖片將超出UIImageView的邊界,請確保clipsToBounds也設置爲YES

讓我知道是否有幫助。

+0

這實際上並不*創建*縮略圖,只是使它看起來像一個... – 2012-02-03 09:19:23

+0

我同意。這是'簡單'的出路:P – 2012-02-03 10:10:51

0

我正在使用下一個方法。輸入是要縮放的UIImage以及UIImage所在的UIImageView的框架的大小。它在框架的高度和寬度相等時起作用。

一件重要的事情:我保持圖像的比例。我不擴大圖像覆蓋整個廣場。如果你想這樣做,你必須改變'drawInRect'行[self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];並刪除if-else。

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 

    CGFloat scaleRatio; 

    if (image.size.width > image.size.height) { 

     scaleRatio = image.size.height/image.size.width; 

    }else{ 

     scaleRatio = image.size.width/image.size.height; 
    } 

    CGAffineTransform scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextConcatCTM(context, scaleTransform); 

    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0); 

    if (image.size.width > image.size.height) { 

     [image drawInRect:CGRectMake(0, (newSize.height/2)-(newSize.height*scaleRatio/2), newSize.width, newSize.height*scaleRatio)]; 

    }else{ 

     [image drawInRect:CGRectMake((newSize.width/2)-(newSize.width*scaleRatio/2), 0, newSize.width*scaleRatio, newSize.height)]; 
    } 

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return newImage; 
}