[解決済み] UIImage。リサイズ、そしてクロップ
2022-04-14 22:37:41
質問
もう何日もこの問題に直面しているのですが、常に天啓を受ける寸前だと感じているにもかかわらず、目標を達成することができません。
iPhoneのカメラやライブラリから画像を取り込んで、指定した高さに縮小するのは簡単なことだと、デザインのコンセプトの段階で考えていました。 アスペクトフィル UIImageViewのオプションを(すべてコードで)設定し、次に クロップオフ 渡されたCGRectの範囲に収まらないものは、すべて。
カメラやライブラリから元画像を取得するのは簡単なことでした。他の2つのステップがいかに困難であったかに、私はショックを受けています。
添付の画像は、私が達成しようとしているものです。どなたか親切な方、私の手を握っていただけませんか?私がこれまでに見つけたすべてのコード例は、画像が壊れ、上下が逆さまになり、ひどい有様になり、境界外を描画し、さもなければただ正しく動作しないようです。
解決するには?
私も同じことが必要でした。私の場合、一度拡大縮小して収まる寸法を選び、両端をトリミングして残りを幅に合わせることです。(私は横向きで作業しているので、縦向きでは不備に気づかなかったかもしれません)。 以下は私のコードです。これはUIImageに関するカテジーの一部です。私のコードでは、ターゲットサイズは常にデバイスのフルスクリーンサイズに設定されています。
@implementation UIImage (Extras)
#pragma mark -
#pragma mark Scale and crop image
- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
{
UIImage *sourceImage = self;
UIImage *newImage = nil;
CGSize imageSize = sourceImage.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
CGFloat targetWidth = targetSize.width;
CGFloat targetHeight = targetSize.height;
CGFloat scaleFactor = 0.0;
CGFloat scaledWidth = targetWidth;
CGFloat scaledHeight = targetHeight;
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
if (CGSizeEqualToSize(imageSize, targetSize) == NO)
{
CGFloat widthFactor = targetWidth / width;
CGFloat heightFactor = targetHeight / height;
if (widthFactor > heightFactor)
{
scaleFactor = widthFactor; // scale to fit height
}
else
{
scaleFactor = heightFactor; // scale to fit width
}
scaledWidth = width * scaleFactor;
scaledHeight = height * scaleFactor;
// center the image
if (widthFactor > heightFactor)
{
thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
}
else
{
if (widthFactor < heightFactor)
{
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
}
}
}
UIGraphicsBeginImageContext(targetSize); // this will crop
CGRect thumbnailRect = CGRectZero;
thumbnailRect.origin = thumbnailPoint;
thumbnailRect.size.width = scaledWidth;
thumbnailRect.size.height = scaledHeight;
[sourceImage drawInRect:thumbnailRect];
newImage = UIGraphicsGetImageFromCurrentImageContext();
if(newImage == nil)
{
NSLog(@"could not scale image");
}
//pop the context to get back to the default
UIGraphicsEndImageContext();
return newImage;
}
関連
-
[解決済み] C#を使用して画像を切り抜くには?
-
[解決済み] 私のアプリケーションは「暗号を含む」のでしょうか?
-
[解決済み] UIImageのサイズを変更する最も簡単な方法?
-
[解決済み] iOSシミュレータでファイルシステムを確認する方法はありますか?
-
[解決済み] UIImageを90度回転させるには?
-
[解決済み] CGFloatとfloatを使うことの違いは何ですか?
-
[解決済み] .xibファイルと.storyboardの違いは何ですか?
-
[解決済み] UIImageのアスペクト比と幅を維持したリサイズ
-
[解決済み] viewWillAppear:と-viewDidAppear:の違いは何ですか?
-
[解決済み] Xcodeで非推奨の警告を抑制する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Retinaディスプレイで画質を落とさずにUIViewからUIImageにキャプチャする方法
-
[解決済み] UINavigationControllerに右ボタンを追加する方法は?
-
[解決済み] iOSシミュレータでファイルシステムを確認する方法はありますか?
-
[解決済み] UIButtonのimageSizeを調整する方法を教えてください。
-
[解決済み] プロダクションコードでNSLog()を使ってはいけないというのは本当ですか?
-
[解決済み] iPhoneでMonoTouchは禁止になったのか?[クローズド]
-
[解決済み] UISearchDisplayController/UISearchBarでNSFetchedResultsController(CoreData)をフィルタリングする方法
-
[解決済み] viewWillAppear:と-viewDidAppear:の違いは何ですか?
-
[解決済み] オプションのメソッドを持つプロトコルを作成するには?
-
[解決済み] iOSで画像サイズを簡単に変更するには?