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)];」を実行すると、スキューの問題が発生します。私の仮定は正しいですか?とにかくこの問題を軽減するには、アプリの別の場所に「圧縮された」画像を表示する必要があるためです。
myImageView.contentMode = UIViewContentModeScaleAspectFit;
は、Zhenが望むように画像のアスペクト比を変更するため十分ではありませんが、Zhenが必要とするソース画像は変更しません。それを行う唯一の方法は、そこに説明されているようにUIGraphicsImageContextを使用することです: アスペクト比でUIImageのサイズを変更しますか?
UIImageView
のコンテンツモードを調整する必要があります。
myImageView.contentMode = UIViewContentModeScaleAspectFit;
キックのために-UIViewContentMode
定数に関するドキュメントを確認してください。
contentMode
インスタンスのUIImageView
プロパティを次のように設定できます。
myImageView.contentMode = UIViewContentModeScaleAspectFit;
これにより、スケーリング時に画像のアスペクト比が保持されます。 リファレンスドキュメント で説明されているように、他の動作を生成するためにここで設定できる他の多くの値もあります。