2011-02-01 89 views
3

調整照片大小併爲照片流創建方形,相同大小的縮略圖圖片的最佳方式是什麼? Flickr和Facebook這樣做,我們想模仿這個功能。將照片調整爲縮略圖方塊,如Flickr和Facebook照片流?

下面是一個例子:http://www.flickr.com/photos/alphageek/233472093/

如果您查看在右手邊(MID頁),所有的縮略圖的大小相同,即使原始圖像大小不等,最重要的是,縮略圖的照片流出現智能裁剪。

Flickr能夠在主焦點周圍自動裁剪和調整圖像大小,而不是簡單地將圖像調整爲縮略圖大小(例如,通過設置圖像的寬度和高度),這會導致圖像顯得凹凸不平並失去圖像的焦點。

+0

正如我看到你發送的所有圖片鏈接似乎被裁剪到中間,也許有點重採樣 - 所以你可以看到更多的畫面,但它不是那麼討厭 – SergeS 2011-02-01 20:22:17

+0

謝謝,SergeS。他們如何以編程方式執行此操作? – Crashalot 2011-02-01 23:25:27

回答

1

他們正在做一個調整大小的作物。

如果您使用imagemagick將其轉換爲像「40x40#」或「90x90#」這樣的#選項,其中照片將被調整大小然後裁剪以保持寬高比,同時儘可能多地縮略圖。

編程它可能是這樣的:

1),使得當所指定的短邊調整大小的圖像。 2)中等作物,所以長邊現在也符合規定。

1

是的。首先,你需要得到一個新的尺寸保持縱橫比不變:

CGFloat horizontalRatio = newSize.width/oldSize.width; 
CGFloat verticalRatio = newSize.height/oldSize.height; 
CGFloat ratio = MAX(horizontalRatio, verticalRatio); 
CGSize newSize = CGSizeMake(oldSize.width *ratio, newSize.height*ratio) 

然後,你需要重繪新的大小圖像(自我是你的形象):

UIGraphicsBeginImageContextWithOptions(newSize, YES, 0); 
    [self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

然後裁剪至所需尺寸:

 CGRect cropRect = CGRectMake ((newImage.size.width - width)/2, (newImage.size.height - height)/2, width, height) 
     UIGraphicsBeginImageContextWithOptions(cropRect.size, YES, 0); 
     CGContextRef context = UIGraphicsGetCurrentContext(); 
     CGRect drawRect = CGRectMake(-cropRect.origin.x, -cropRect.origin.y, self.size.width, self.size.height); 
     CGContextClipToRect(context, CGRectMake(0, 0, cropRect.size.width, cropRect.size.height)); 
     [self drawInRect:drawRect]; 
     UIImage* croppedImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
return croppedImage;