|
@@ -7,6 +7,7 @@
|
|
|
//
|
|
//
|
|
|
|
|
|
|
|
#import "TakePhotoPreviewController.h"
|
|
#import "TakePhotoPreviewController.h"
|
|
|
|
|
+#import "const.h"
|
|
|
|
|
|
|
|
@interface TakePhotoPreviewController ()<UIScrollViewDelegate>
|
|
@interface TakePhotoPreviewController ()<UIScrollViewDelegate>
|
|
|
|
|
|
|
@@ -35,8 +36,12 @@
|
|
|
- (void)viewDidLayoutSubviews {
|
|
- (void)viewDidLayoutSubviews {
|
|
|
[super viewDidLayoutSubviews];
|
|
[super viewDidLayoutSubviews];
|
|
|
|
|
|
|
|
- self.imgView.frame = CGRectMake(0, 70, CGRectGetWidth(self.previewScroll.frame), CGRectGetHeight(self.previewScroll.frame) - 150);
|
|
|
|
|
|
|
+ CGSize size = [self imgViewOriginSize];
|
|
|
|
|
|
|
|
|
|
+ CGRect frame = CGRectMake(0, 70, size.width, size.height);
|
|
|
|
|
+
|
|
|
|
|
+ self.imgView.frame = frame;
|
|
|
|
|
+ // CGRectMake(0, 70, CGRectGetWidth(self.previewScroll.frame), CGRectGetHeight(self.previewScroll.frame) - 150)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)prefersStatusBarHidden {
|
|
- (BOOL)prefersStatusBarHidden {
|
|
@@ -48,6 +53,19 @@
|
|
|
// Dispose of any resources that can be recreated.
|
|
// Dispose of any resources that can be recreated.
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+- (CGSize)imgViewOriginSize {
|
|
|
|
|
+ CGFloat width = CGRectGetWidth(self.previewScroll.bounds);
|
|
|
|
|
+ CGFloat height = CGRectGetHeight(self.previewScroll.bounds);
|
|
|
|
|
+ CGFloat w = self.preImage.size.width;
|
|
|
|
|
+ CGFloat h = self.preImage.size.height;
|
|
|
|
|
+ // 根据图片大小和ScrollView大小等比缩放,使ScrollView容得下图片
|
|
|
|
|
+ float factor = MAX(w / width, h / height);
|
|
|
|
|
+ factor = 1 / factor;
|
|
|
|
|
+
|
|
|
|
|
+ CGSize size = CGSizeMake(w * factor, h * factor);
|
|
|
|
|
+ return size;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
- (UIImageView *)imgView {
|
|
- (UIImageView *)imgView {
|
|
|
if (!_imgView) {
|
|
if (!_imgView) {
|
|
|
_imgView = [[UIImageView alloc] initWithImage:self.preImage];
|
|
_imgView = [[UIImageView alloc] initWithImage:self.preImage];
|
|
@@ -70,15 +88,19 @@
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (UIImage *)captureImageWithImage:(UIImage *)image inRect:(CGRect)rect {
|
|
- (UIImage *)captureImageWithImage:(UIImage *)image inRect:(CGRect)rect {
|
|
|
- CGFloat scale = [UIScreen mainScreen].scale;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ CGFloat scale = image.scale;
|
|
|
rect.origin.x *= scale;
|
|
rect.origin.x *= scale;
|
|
|
rect.origin.y *= scale;
|
|
rect.origin.y *= scale;
|
|
|
rect.size.height *= scale;
|
|
rect.size.height *= scale;
|
|
|
rect.size.width *= scale;
|
|
rect.size.width *= scale;
|
|
|
CGImageRef imgRef = CGImageCreateWithImageInRect(image.CGImage, rect);
|
|
CGImageRef imgRef = CGImageCreateWithImageInRect(image.CGImage, rect);
|
|
|
- UIImage *img = [UIImage imageWithCGImage:imgRef];
|
|
|
|
|
|
|
+ UIImage *img = [UIImage imageWithCGImage:imgRef scale:0 orientation:3];
|
|
|
CGImageRelease(imgRef);
|
|
CGImageRelease(imgRef);
|
|
|
return img;
|
|
return img;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (IBAction)retakeBtnClick:(UIButton *)sender {
|
|
- (IBAction)retakeBtnClick:(UIButton *)sender {
|
|
@@ -90,8 +112,20 @@
|
|
|
|
|
|
|
|
- (IBAction)usePhotoClick:(UIButton *)sender {
|
|
- (IBAction)usePhotoClick:(UIButton *)sender {
|
|
|
if (self.photoHandler) {
|
|
if (self.photoHandler) {
|
|
|
- UIImage *img = [self captureImageInView:self.view];
|
|
|
|
|
- img = [self captureImageWithImage:img inRect:self.editContainer.frame];
|
|
|
|
|
|
|
+
|
|
|
|
|
+ CGRect imgRect = self.imgView.frame;
|
|
|
|
|
+ CGRect editRect = self.editContainer.frame;
|
|
|
|
|
+ CGRect screenRect = self.view.bounds;
|
|
|
|
|
+ CGFloat screen_img_x = (CGRectGetWidth(imgRect) - CGRectGetWidth(screenRect)) * 0.5;
|
|
|
|
|
+ CGFloat screen_img_y = (CGRectGetHeight(imgRect) - CGRectGetHeight(screenRect)) * 0.5;
|
|
|
|
|
+ CGRect rect = CGRectMake(screen_img_x + editRect.origin.x, screen_img_y + editRect.origin.y, editRect.size.width, editRect.size.height);
|
|
|
|
|
+
|
|
|
|
|
+ CGFloat scale = self.preImage.size.width / CGRectGetWidth(imgRect);
|
|
|
|
|
+
|
|
|
|
|
+ CGRect clipImgRect = CGRectMake(rect.origin.x * scale, rect.origin.y * scale, rect.size.width * scale, rect.size.height * scale);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ UIImage *img = [self captureImageWithImage:self.preImage inRect:clipImgRect];
|
|
|
self.photoHandler(img);
|
|
self.photoHandler(img);
|
|
|
}
|
|
}
|
|
|
[self.navigationController popViewControllerAnimated:YES];
|
|
[self.navigationController popViewControllerAnimated:YES];
|
|
@@ -119,7 +153,7 @@
|
|
|
// size.height = size.height * pinch.scale;
|
|
// size.height = size.height * pinch.scale;
|
|
|
size = imgv.frame.size;// bounds 和 frame 不一致
|
|
size = imgv.frame.size;// bounds 和 frame 不一致
|
|
|
CGSize itemSize = self.editContainer.frame.size;
|
|
CGSize itemSize = self.editContainer.frame.size;
|
|
|
-
|
|
|
|
|
|
|
+ DebugLog(@"size %@",[NSValue valueWithCGSize:size]);
|
|
|
if (size.height < itemSize.height || size.width < itemSize.width) { // 禁止缩小得比原图小
|
|
if (size.height < itemSize.height || size.width < itemSize.width) { // 禁止缩小得比原图小
|
|
|
imgv.transform = CGAffineTransformIdentity;
|
|
imgv.transform = CGAffineTransformIdentity;
|
|
|
size = imgv.frame.size;
|
|
size = imgv.frame.size;
|