Saving 2 UIImages to one while saving rotation, resize info and its quality
I want to save 2 UIImages that are moved, resized and rotated by user. The problem is i dont want to use such function as any ‘printscreen one’, because it makes both images to lose a lot from their quality (resolution).
Atm i use something like this:
UIGraphicsBeginImageContext(image1.size); [image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)]; [image2 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)]; UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
However ofc it just adds two images, their rotation, resizing and moving isn’t operated here. Can anybody help with considering these 3 aspects in coding? Any help is appreciated!
My biggest thanks in advance 🙂
EDIT: images can be rotated and zoomed by user (handling touch events)!
- using iOS 6.0 SDK and building for iOS 5 Target causes UIScrollView setMinimumZoomScale to fail when running on iOS 5 simulator
- UIWebView set initial zoom scale programmatically when loading an external website?
- UIScrollView Zoom Does Not Work With Autolayout
- Objective-C iOS Crop Image Using Zoom?
- UIScrollView setZoomScale:animated messes scrollView aspect ratio
- how to make mapview zoom to 5 mile radius of current location
2 Solutions Collect From Internet About “Saving 2 UIImages to one while saving rotation, resize info and its quality”
You have to set the transform of the context to match your imageView’s transform before you start drawing into it.
CGAffineTransform transform = CGAffineTransformIdentity; transform = CGAffineTransformTranslate(transform, boundingRect.size.width/2, boundingRect.size.height/2); transform = CGAffineTransformRotate(transform, angle); transform = CGAffineTransformScale(transform, 1.0, -1.0); CGContextConcatCTM(context, transform); // Draw the image into the context CGContextDrawImage(context, CGRectMake(-imageView.image.size.width/2, -imageView.image.size.height/2, imageView.image.size.width, imageView.image.size.height), imageView.image.CGImage); // Get an image from the context rotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];
and check out Creating a UIImage from a rotated UIImageView.
EDIT: if you don’t know the angle of rotation of the image you can get the transform from the layer property of the UIImageView:
UIGraphicsBeginImageContext(rotatedImageView.image.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGAffineTransform transform = rotatedImageView.transform; transform = CGAffineTransformScale(transform, 1.0, -1.0); CGContextConcatCTM(context, transform); // Draw the image into the context CGContextDrawImage(context, CGRectMake(0, 0, rotatedImageView.image.size.width, rotatedImageView.image.size.height), rotatedImageView.image.CGImage); // Get an image from the context UIImage *newRotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)]; UIGraphicsEndImageContext();
You will have to play about with the transform matrix to centre the image in the context and you will also have to calculate a bounding rectangle for the rotated image or it will be cropped at the corners (i.e., rotatedImageView.image.size is not big enough to encompass a rotated version of itself).
UIImage *temp = [[UIImage alloc] initWithCGImage:image1 scale:1.0 orientation: yourOrientation]; [temp drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];
Similarly for image2. Rotation and resizing are handled by orientation and scale respectively. yourOrientation is a UIImageOrientation enum variable and can have a value from 0-7(check this apple documentation on different UIImageOrientation values). Hope it helps…
EDIT: To handle rotations, just write the desired orientation for the rotation you require. You can rotate 90 deg left/right or flip vertically/horizontally. For eg, in the apple documentation, UIImageOrientationUp is 0, UIImageOrientationDown is 1 and so on. Check out my github repo for an example.
- PFUser that created object cannot delete object despite ACL writing access?
- How do I get a UIButton press to work in a UICollectionViewCell in Swift?
- AVAssetExportSession not working in ios5
- Check battery level in background?
- Set default iOS local notification style for application
- IBOutlets not showing on XCode 6.1 (6A1052d)
- Swift – Check if date is in next week / month. ( isDateInNextWeek() isDateInNextMonth() )
- How to initialize NSString to NSMutableString?
- Duplicating subviews(UIButton and UIImageView) of UITableViewCell contentView on scrolling
- Objective-C comment documentation on /** @discussion @param @see @return … */
- set title of back bar button item in ios
- iOS Periodically perform a low-priority task while the system is idle
- How to typecast a subclassed UIViewController in Swift?
- method taking mutli arguments in dot notation