2011-02-01 86 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;