web-dev-qa-db-ja.com

目的C:画像の縦横比を修正する方法(および、imageviewフレームに合わせて変更しない)

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

例えば、

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

enter image description here

「移動および拡大縮小」ページを介してiPhoneで画像を選択して画像をトリミングした後、結果は次のようになります(アスペクト比はここでも維持されます)。

enter image description here

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

enter image description here

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

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

いくつかの考えの後、私の問題を解決する最良の方法は、そのような画像(正方形ではない)について、それらを正方形の画像に「変換」する必要があることを理解しています。正方形の例.

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

enter image description here

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

- (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で正方形の画像を取得できました

enter image description here

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

21
Zhen

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

37
edo42

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

myImageView.contentMode = UIViewContentModeScaleAspectFit;

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

23
Eimantas

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

myImageView.contentMode = UIViewContentModeScaleAspectFit;

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

7
aroth