首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ios -可以垂直但不是水平地裁剪照片

ios -可以垂直但不是水平地裁剪照片
EN

Stack Overflow用户
提问于 2015-11-07 21:59:10
回答 1查看 341关注 0票数 0

我有一个UIScrollView,里面有一个UIImageView。对于我的应用程序的这一部分,用户可以选择照片从他们的相机卷和缩放和裁剪。

我已经成功地使用户能够选择不同的照片,然后放大和缩小-周围的图像。此外,用户可以放大,使图像中心垂直或水平取决于图像是肖像或景观。

问题是,我试着从滚动视图中的可见区域将照片裁剪到一个新的图像,但是它只适用于肖像照片。

下面是一个例子,说明它起作用而不起作用:

这里是一个放大以适应屏幕的肖像图像:

下一步,我放大图像,这样就没有黑空间了。

最后,我裁剪了这张照片,你可以在左上角看到它完美的生长。

然而,,由于某种原因,当我试图用景观图像做这件事时,裁剪会搞砸吗?!下面是它不起作用的一个例子。

这里是一幅放大的景观图像.

下一步,我放大,这样就没有黑色空间了。注意我是如何放大的,所以在照片中看不到白板的物理边框。。

现在,我像以前一样裁剪这张照片,但它没有正确地裁剪它。注意左上角的图像是如何与以前不同的。它似乎被放大了,你可以看到更多的白板底部。。

我需要弄清楚为什么会发生这种事,以及如何解决。

这是我用来从UIScrollView中裁剪照片的确切代码。

代码语言:javascript
运行
复制
    //Get the scale
    float scale = 1.0f/_libraryScrollView.zoomScale;

    //Create a new rect
    CGRect visibleRect;
    visibleRect.origin.x = _libraryScrollView.contentOffset.x * scale;
    visibleRect.origin.y = _libraryScrollView.contentOffset.y * scale;
    visibleRect.size.width = _libraryScrollView.bounds.size.width * scale;
    visibleRect.size.height = _libraryScrollView.bounds.size.height * scale;

    //Get the source image
    UIImage *src = libraryPreviewImageView.image;

    //Create the new cropped image with the rect
    CGImageRef cr = CGImageCreateWithImageInRect(src.CGImage, visibleRect);
    UIImage *finalImage = [[UIImage alloc]initWithCGImage:cr];

    //Set the new image to the preview image view
    self.imagePreviewView.image = finalImage;

此代码适用于肖像图像,但不适用于景观图像,如上面的示例所示。这个错误是与我的裁剪代码有关还是与其他事情有关?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-11-09 04:45:36

最后,我不知道是什么问题,但是尝试用数学从滚动视图中裁剪图像是非常困难的!

我找到了一种非常简单的方法,就是对滚动视图中的可见内容进行屏幕截图,就像这样:

代码语言:javascript
运行
复制
UIGraphicsBeginImageContextWithOptions(_libraryScrollView.bounds.size, YES, [UIScreen mainScreen].scale);
CGPoint offset = _libraryScrollView.contentOffset;
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -offset.x, -offset.y);
[_libraryScrollView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

//Set the new image to the preview image view
self.imagePreviewView.image = finalImage;

我真的希望这个答案也能帮到别人!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33588275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档