私はこのクラスのスウィフトバージョンを作成しました:https://github.com/bennythemink/ZoomRotatePanImageView/blob/master/ZoomRotatePanImageView.mいいです。これで、変更したイメージをファイルに保存します。私はそれを完全な解像度で保存したいと思っています。また、ユーザーにしか見えない領域を保存したいと思っています。ズーム、回転、パンニング後に編集した画像を保存する
私はあなたに簡単な例を示しましょう:
これは、それは私のアプリでどのように見えるかです。画像は、iOSシミュレータのサンプルの1つです。そのほとんどは画面外です。私は可視部分だけを欲しい。それは次のようになり、トリミングせずに保存した後
:それは素敵なことだクリッピング後
これまでのところは良いです。
しかし、今のは、いくつかの変更を加えてみましょう:
保存した後:それは間違っているピボットで形質転換しているよう
が見えます。どうすれば修正できますか?
UIGraphicsBeginImageContextWithOptions(imageContainer.bounds.size, false, 0)
self.imageContainer.drawViewHierarchyInRect(imageContainer.bounds, afterScreenUpdates: true)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
しかし、出力画像は、実際の画像をビューのサイズをしていないと私は完全な形でそれをしたい:
UIGraphicsBeginImageContextWithOptions(image.size, false, 0)
let context = UIGraphicsGetCurrentContext()
let transform = imageView.transform
let imageRect = CGRectMake(0, 0, image.size.width, image.size.height)
CGContextSetFillColorWithColor(context, UIColor.blueColor().CGColor) //for debugging
CGContextFillRect(context, imageRect)
CGContextConcatCTM(context, transform)
image.drawInRect(imageRect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
それを達成するための簡単な方法があります:
はここに節約のために私のコードです解決。
感謝を撃ったが、私はフル解像度で画像をしたいと述べたように。私はすでに画面のような解像度でソリューションを投稿しました。私の質問の一番下を見てください。 image!.drawInRect(imageView!.bounds) - これは4kイメージをimageViewのサイズにするので、画面サイズによって異なります。 – Makalele
ありがとう、私たちは近いと思います。それはほぼ同じように見えます。しかし問題は、画面上の目に見える部分だけに正確に切り取られる必要があることです(正確には、少し小さくする - iPhoneイメージに合わせるためです)。完全なクラスコードを見てください: http://pastebin.com/6UUj1B0w のprepareForSegueはあなたのコードです。 topImageはあなたがスクリーンショットで見ることができるiPhoneです。空のビューコントローラで新しいプロジェクトを簡単にテストできます。一番下には唯一の方法があります。どのように見えるかを示しています。 – Makalele
ZoomRotatePanImageViewは常にアスペクトに適合します。したがって、topImageViewとimageViewのフレームを設定する必要はありません。フルスクリーンサイズを維持してください。コンテンツモードをtopImageViewに適したものに設定します。私のサンプルのスクリーンショットが添付され、期待どおりに動作します。 –