web-dev-qa-db-ja.com

Swiftを使用して画像の一部を選択し、切り抜き、保存する方法は?

Swiftを使用してiOSアプリを作成しようとしています。ユーザーが画像の選択した部分を保存できるようにします。多くのカムベースのアプリでは、ユーザーが希望する部分を選択します。これには、長方形のエッジをスライドさせるか、必要な領域に合うようにコーナーを移動することが含まれます。

その移動可能な長方形を実装する方法と、その画像の一部のみを保存する方法について教えてもらえますか?

16
Sriram

もう1つのソリューションが見つかりました。今回はSwiftにあります。ソリューションはエレガントに見え、他のそのようなソリューションに関連するコードはより少ない行数で書かれています。

ここにあります。 https://github.com/DuncanMC/CropImg githubで作品を公開してくれたDuncan Champneyに感謝します。

10
Sriram

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属性は、トリミングされる画像内の「トリミング長方形」を定義します。

29
Paulo

https://github.com/myang-git/iOS-Image-Crop-View はあなたが探しているもののようなことをします。

お役に立てれば。

7
Subbu

画像のトリミング後に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
0
Iraniya Naynesh