2011-02-01 12 views
3

写真のサイズを変更し、フォトストリーム用の正方形の同じサイズのサムネイル画像を作成する最良の方法は何ですか? FlickrとFacebookはこれを行い、この機能をエミュレートしたいと考えています。FlickrやFacebookフォトストリームのようなサムネイルの四角で写真のサイズを変更しますか?

ここでは例です:http://www.flickr.com/photos/alphageek/233472093/

あなたは右側(ミッドページ)でフォトストリームを表示すると、すべてのサムネイルは、元の画像のサイズが異なるにもかかわらず、同じサイズであり、そして最も重要なのは、サムネイルインテリジェントに切り取って表示されます。

Flickrは、画像をサムネイルサイズ(画像の幅と高さを設定するなど)にサイズ変更するのではなく、主なフォーカスの周りで画像を自動的にトリミングしてサイズ変更することができます。画像の焦点。

+0

あなたはすべての画像を送った私は、リンク上で見られるように、中央にトリミングしているように見える、と多分リサンプリングビット - あなたは、画像の詳細を参照することができますが、それは – SergeS

+0

おかげで、SergeSとても迷惑ではありません。彼らはプログラムでどのようにそれを行うのですか? – Crashalot

答えて

0

このような問題については、私はいつも使用します:http://www.imagemagick.org/script/convert.php

イメージ処理は、イメージを操作するための多くの機能を提供します。 イメージをループで撮り、大きなバージョンとサムネイルバージョンを作成します。

1

彼らはサイズ変更された作物をしています。

imagemagickを使用して変換する場合は、写真のサイズを変更して縮小率を維持するために「40x40#」や「90x90#」のような#オプションになります。

プログラムで、それはおそらく、このように書きます:

1)指定された短辺になるように画像のサイズを変更します。 2)中央のために切り取るので、長辺も指定されています。

+0

ありがとう! imagemagickをダウンロードせずにこれを行う方法はありますか? – Crashalot

1

はい。その後、所望のサイズにトリミング

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

:次に、あなたは新しいサイズ(自己があなたのイメージである)で、あなたのイメージを再描画する必要が

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) 

:まず、あなたはそのまま新しいサイズキープアスペクト比を取得する必要があります:

 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; 
関連する問題