像Flickr和Facebook照片流中的缩略图一样调整照片大小?

时间:2011-02-01 20:18:22

标签: facebook thumbnails photo flickr crop

调整照片大小和为照片流创建方形,相同大小的缩略图的最佳方法是什么? Flickr和Facebook这样做,我们想模仿这个功能。

以下是一个示例:http://www.flickr.com/photos/alphageek/233472093/

如果您在右侧(中间页面)查看照片流,即使原始图像的大小不同,所有缩略图的大小也相同,最重要的是,缩略图会出现智能裁剪。

Flickr能够自动裁剪并调整主焦点周围的图像大小,而不是简单地将图像调整为缩略图大小(例如,通过设置图像宽度和高度),这会导致图像看起来被压扁并丢失图像的焦点。

3 个答案:

答案 0 :(得分:1)

他们正在做一个调整大小的作物。

如果您使用imagemagick进行转换,则会选择“40x40#”或“90x90#”等#选项,其中照片将调整大小,然后裁剪以保持纵横比,同时尽可能多地缩略图。

以编程方式它可能是这样的:

1)调整图像大小,使短边符合规定。 2)中间裁剪,所以长边现在也按照规定。

答案 1 :(得分: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; 

答案 2 :(得分:0)

对于此类问题,我总是使用:http://www.imagemagick.org/script/convert.php

Imagemagick为操作图像提供了许多功能。 我在循环中拍摄图像并创建大版本和缩略图版本。

相关问题