怎么把进入相册选取照片之后进入的裁剪页里面的裁剪框控制大小?

liudi224 2014-12-15 11:20:08

就是那个白色的框框。可以控制它的大小么?
...全文
8181 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liudi224 2014-12-17
  • 打赏
  • 举报
回复
引用 9 楼 zhanglei5415 的回复:
[quote=引用 7 楼 liudi224 的回复:] [quote=引用 4 楼 zhanglei5415 的回复:] 在选取图片时,如果开启了Editable,默认的那个选取框你是没办法调整其大小的。如果想要调整选取的大小及位置,只能是自定义实现裁剪功能。image croper 类似的demo 可以去code4app 上搜索一下。参考一下别人写的。
您好。我获取到了相册。也进入自定义的截取页了。但是我截取之后。图片会失帧,而且还旋转了90度。我贴一些代码。 我是这样写的。但是裁剪出来的图片不对啊。。位置都不对。[/quote] 1. 关于旋转。你需要通过判断uiimage 的orientation来修正要截取图片的方向。见如下方法(可使用category来扩展uiimage)
- (UIImage *)fixrotation:(UIImage *)image{
    if (image.imageOrientation == UIImageOrientationUp) return image;
    CGAffineTransform transform = CGAffineTransformIdentity;

    switch (image.imageOrientation) {
        case UIImageOrientationDown:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, image.size.width, image.size.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;

        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
            transform = CGAffineTransformTranslate(transform, image.size.width, 0);
            transform = CGAffineTransformRotate(transform, M_PI_2);
            break;

        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, 0, image.size.height);
            transform = CGAffineTransformRotate(transform, -M_PI_2);
            break;
        case UIImageOrientationUp:
        case UIImageOrientationUpMirrored:
            break;
    }

    switch (image.imageOrientation) {
        case UIImageOrientationUpMirrored:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, image.size.width, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;

        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, image.size.height, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;
        case UIImageOrientationUp:
        case UIImageOrientationDown:
        case UIImageOrientationLeft:
        case UIImageOrientationRight:
            break;
    }

    // Now we draw the underlying CGImage into a new context, applying the transform
    // calculated above.
    CGContextRef ctx = CGBitmapContextCreate(NULL, image.size.width, image.size.height,
                                             CGImageGetBitsPerComponent(image.CGImage), 0,
                                             CGImageGetColorSpace(image.CGImage),
                                             CGImageGetBitmapInfo(image.CGImage));
    CGContextConcatCTM(ctx, transform);
    switch (image.imageOrientation) {
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            // Grr...
            CGContextDrawImage(ctx, CGRectMake(0,0,image.size.height,image.size.width), image.CGImage);
            break;

        default:
            CGContextDrawImage(ctx, CGRectMake(0,0,image.size.width,image.size.height), image.CGImage);
            break;
    }

    // And now we just create a new UIImage from the drawing context
    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
    UIImage *img = [UIImage imageWithCGImage:cgimg];
    CGContextRelease(ctx);
    CGImageRelease(cgimg);
    return img;

}
2. 关于失真。生成新图片的时候,建议使用CGImageCreate方法 来得到CGImage 并最终得到要生成的image对象。[/quote] 我从点击图片之后。就去获取原图的大小。但是好像没有获取到。。。请问是info中的哪个属性。。
ReyZhang 2014-12-16
  • 打赏
  • 举报
回复
引用 7 楼 liudi224 的回复:
[quote=引用 4 楼 zhanglei5415 的回复:] 在选取图片时,如果开启了Editable,默认的那个选取框你是没办法调整其大小的。如果想要调整选取的大小及位置,只能是自定义实现裁剪功能。image croper 类似的demo 可以去code4app 上搜索一下。参考一下别人写的。
您好。我获取到了相册。也进入自定义的截取页了。但是我截取之后。图片会失帧,而且还旋转了90度。我贴一些代码。 我是这样写的。但是裁剪出来的图片不对啊。。位置都不对。[/quote] 1. 关于旋转。你需要通过判断uiimage 的orientation来修正要截取图片的方向。见如下方法(可使用category来扩展uiimage)
- (UIImage *)fixrotation:(UIImage *)image{
    if (image.imageOrientation == UIImageOrientationUp) return image;
    CGAffineTransform transform = CGAffineTransformIdentity;

    switch (image.imageOrientation) {
        case UIImageOrientationDown:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, image.size.width, image.size.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;

        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
            transform = CGAffineTransformTranslate(transform, image.size.width, 0);
            transform = CGAffineTransformRotate(transform, M_PI_2);
            break;

        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, 0, image.size.height);
            transform = CGAffineTransformRotate(transform, -M_PI_2);
            break;
        case UIImageOrientationUp:
        case UIImageOrientationUpMirrored:
            break;
    }

    switch (image.imageOrientation) {
        case UIImageOrientationUpMirrored:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, image.size.width, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;

        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, image.size.height, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;
        case UIImageOrientationUp:
        case UIImageOrientationDown:
        case UIImageOrientationLeft:
        case UIImageOrientationRight:
            break;
    }

    // Now we draw the underlying CGImage into a new context, applying the transform
    // calculated above.
    CGContextRef ctx = CGBitmapContextCreate(NULL, image.size.width, image.size.height,
                                             CGImageGetBitsPerComponent(image.CGImage), 0,
                                             CGImageGetColorSpace(image.CGImage),
                                             CGImageGetBitmapInfo(image.CGImage));
    CGContextConcatCTM(ctx, transform);
    switch (image.imageOrientation) {
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            // Grr...
            CGContextDrawImage(ctx, CGRectMake(0,0,image.size.height,image.size.width), image.CGImage);
            break;

        default:
            CGContextDrawImage(ctx, CGRectMake(0,0,image.size.width,image.size.height), image.CGImage);
            break;
    }

    // And now we just create a new UIImage from the drawing context
    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
    UIImage *img = [UIImage imageWithCGImage:cgimg];
    CGContextRelease(ctx);
    CGImageRelease(cgimg);
    return img;

}
2. 关于失真。生成新图片的时候,建议使用CGImageCreate方法 来得到CGImage 并最终得到要生成的image对象。
asd775348603 2014-12-16
  • 打赏
  • 举报
回复
苹果竖着拍的图片从ImagePicker里读取出来时有90度倾斜、图片失帧原因是你截取的是当前屏幕的图片大小不是在原始图上截取的
liudi224 2014-12-16
  • 打赏
  • 举报
回复
引用 4 楼 zhanglei5415 的回复:
在选取图片时,如果开启了Editable,默认的那个选取框你是没办法调整其大小的。如果想要调整选取的大小及位置,只能是自定义实现裁剪功能。image croper 类似的demo 可以去code4app 上搜索一下。参考一下别人写的。
您好。我获取到了相册。也进入自定义的截取页了。但是我截取之后。图片会失帧,而且还旋转了90度。我贴一些代码。
我是这样写的。但是裁剪出来的图片不对啊。。位置都不对。
liudi224 2014-12-15
  • 打赏
  • 举报
回复
引用 2 楼 MakeUpForEver 的回复:
ADIUASYFASF
这是什么?
liudi224 2014-12-15
  • 打赏
  • 举报
回复
请问有人么。。
liudi224 2014-12-15
  • 打赏
  • 举报
回复
谢谢。我先看看。
Bannings 2014-12-15
  • 打赏
  • 举报
回复
那就不能进入系统原生的Crop页面了,拿到image后进入自己的Crop页面,Crop方法可以参考这里: http://code4app.com/ios/Crop-Image/5087c07e6803fa9961000000
ReyZhang 2014-12-15
  • 打赏
  • 举报
回复
在选取图片时,如果开启了Editable,默认的那个选取框你是没办法调整其大小的。如果想要调整选取的大小及位置,只能是自定义实现裁剪功能。image croper 类似的demo 可以去code4app 上搜索一下。参考一下别人写的。

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧