Swiftを使用してiOSアプリを作成しようとしています。ユーザーが画像の選択した部分を保存できるようにします。多くのカムベースのアプリでは、ユーザーが希望する部分を選択します。これには、長方形のエッジをスライドさせるか、必要な領域に合うようにコーナーを移動することが含まれます。
その移動可能な長方形を実装する方法と、その画像の一部のみを保存する方法について教えてもらえますか?
もう1つのソリューションが見つかりました。今回はSwiftにあります。ソリューションはエレガントに見え、他のそのようなソリューションに関連するコードはより少ない行数で書かれています。
ここにあります。 https://github.com/DuncanMC/CropImg githubで作品を公開してくれたDuncan Champneyに感謝します。
Swiftを使用して
CGImages from CoreGraphicsを使用して、画像のトリミングを行うことができます。
次のようなUIImageのCGImageバージョンを取得します。
// cgImage is an attribute of UIImage
let cgImage = image.cgImage
CGImageオブジェクトには、トリミングを行うメソッドcropping(to:CGRect)があります。
let croppedCGImage: CGImage = cgImage.cropping(to: toRect)
最後に、CGImageからIImageに逆変換します。
let uiImage = UIImage(cgImage: croppedCGImage)
関数の例:
func cropImage(image: UIImage, toRect: CGRect) -> UIImage? {
// Cropping is available trhough CGGraphics
let cgImage :CGImage! = image.cgImage
let croppedCGImage: CGImage! = cgImage.cropping(to: toRect)
return UIImage(cgImage: croppedCGImage)
}
トリミングのCGRect属性は、トリミングされる画像内の「トリミング長方形」を定義します。
https://github.com/myang-git/iOS-Image-Crop-View はあなたが探しているもののようなことをします。
お役に立てれば。
画像のトリミング後に90度回転するなどの問題が発生する場合は、これを試してください。
後で使用するために、元の画像のスケールと方向のプロパティを保存します
let imgOrientation = image?.imageOrientation
let imgScale = image?.scale
UIImageからCGImageを取得します。
let cgImage = image.cgImage
トリミングしたいcropArea(CGRect)エリアを渡します(imageView.imageを使用している場合は、スケールを見つけてcgRectを見つけるために数学を実行します)。必要に応じてそのコードを追加します
let croppedCGImage = cgImage.cropping(to: cropArea)
let coreImage = CIImage(cgImage: croppedCGImage!)
画像をレンダリングするためのコンテキストが必要です(その重いプロセスはチェックを行います https://developer.Apple.com/documentation/coreimage/cicontext 複数回行う場合)これを使用して、スケールと方向を設定できます最初の行で作成したので、画像は90回転しません
let ciContext = CIContext(options: nil)
let filteredImageRef = ciContext.createCGImage(coreImage, from: coreImage.extent)
let finalImage = UIImage(cgImage:filteredImageRef!, scale:imgScale!, orientation:imgOrientation!)
imageView.image = finalImage