21

UIImagePickerControllerを使用して、アプリの画像を選択しています。ただし、選択した画像のアスペクト比を維持することに関して、いくつかの課題に直面しています。

例えば、

私は次のように電話に生の画像を持っています(正方形の画像ではありません):

ここに画像の説明を入力してください

「移動と拡大縮小」ページからiphoneで画像を選択して画像を切り抜いた後、結果は次のようになります(アスペクト比はここでも維持されます)

ここに画像の説明を入力してください

私のアプリは、選択した画像を正方形のフレーム(200 x 200)のUIImageViewに表示します。選択した画像をUIImageView(UIImageView.image = selectedImage)に設定した後、画像のアスペクト比は維持されず、代わりにUIImageViewのフレームに従います:(画像はUIImageViewで歪んで見えるようになりました):

ここに画像の説明を入力してください

この場合、画像のアスペクト比を維持する方法はありますか?

編集:期待される結果を更新する

いくつか考えた後、私の問題を解決する最善の方法は、そのような画像(非正方形)の場合、それらを正方形の画像に「変換」する必要があることを確認することです。つまり、画像の上下の空きスペースを埋めて、正方形など

期待される画像:(上下の境界線が追加されています)

ここに画像の説明を入力してください

編集:サンプルコードで更新

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo 
{

    self.imageView.contentMode = UIViewContentModeScaleAspectFill;

    self.imageView.image = image;
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];

    //Compress image
    UIImage *image = [self scaleImage:img toSize:CGSizeMake(612.0,612.0)];

    self.imageData = UIImageJPEGRepresentation(image, 0.75);
}

コード「self.imageView.contentMode=UIViewContentModeScaleAspectFill;」を追加することで、uiimageviewで正方形の画像を取得することができました。

ここに画像の説明を入力してください

ただし、元の画像はまだ正方形の画像ではなかったようです。そのため、「UIImage * image = [self scaleImage:img toSize:CGSizeMake(612.0,612.0)];」を実行すると、スキューの問題が発生します。私の仮定は正しいですか?とにかく、この問題を軽減するには、アプリの他の場所に「圧縮された」画像を表示する必要があります。

4

3 に答える 3

37

ZhenmyImageView.contentMode = UIViewContentModeScaleAspectFit;が望むように画像の縦横比を変更するため、それだけでは十分ではありませんが、Zhen が必要としているソース画像は変更されません。それを行う唯一の方法は、そこで説明されているように UIGraphicsImageContext を使用することです: アスペクト比で UIImage のサイズを変更しますか?

于 2011-07-14T07:25:16.310 に答える
23

UIImageViewのコンテンツモードを調整する必要があります。

myImageView.contentMode = UIViewContentModeScaleAspectFit;

キックのためだけに-UIViewContentMode定数に関するドキュメントを確認してください。

于 2011-07-13T05:46:45.190 に答える
7

次のように、インスタンスにcontentModeプロパティを設定できます。UIImageView

myImageView.contentMode = UIViewContentModeScaleAspectFit;

これにより、拡大縮小時に画像のアスペクト比が維持されます。リファレンスドキュメントで説明されているように、他の動作を生成するためにここで設定できる他の値もいくつかあります。

于 2011-07-13T05:47:07.647 に答える