AVFoundation 根据预览宽高比裁剪捕获的静态图像

2024-03-14

我的问题与这个问题大多相似:

裁剪 AVCaptureSession 捕获的图像 https://stackoverflow.com/questions/5780580/cropping-image-captured-by-avcapturesession

我有一个使用 AVFoundation 来捕获静态图像的应用程序。我的 AVCaptureVideoPreviewLayer 具有 AVLayerVideoGravityResizeAspectFill 视频重力,从而使向用户显示的预览图片从顶部和底部部分进行裁剪。

当用户按下“捕获”按钮时,实际捕获的图像与向用户显示的预览图片不同。我的问题是如何相应地裁剪捕获的图像?

提前致谢。


I used UIImage+Resize中提供的类别here https://github.com/jeremybrooks/TestOverlay/blob/master/TestOverlay/UIImage-categories我写了一些新方法来完成这项工作。我重新格式化了一些代码以使其看起来更好并且未经过测试,但它应该可以工作。 :))

- (UIImage*)cropAndResizeAspectFillWithSize:(CGSize)targetSize
                       interpolationQuality:(CGInterpolationQuality)quality {

    UIImage *outputImage = nil;
    UIImage *imageForProcessing = self;

    // crop center square (AspectFill)
    if (self.size.width != self.size.height) {
        CGFloat shorterLength = 0;
        CGPoint origin = CGPointZero;
        if (self.size.width > self.size.height) {
            origin.x = (self.size.width - self.size.height)/2;
            shorterLength = self.size.height;
        }
        else {
            origin.y = (self.size.height - self.size.width)/2;
            shorterLength = self.size.width;
        }
        imageForProcessing = [imageForProcessing normalizedImage];
        imageForProcessing = [imageForProcessing croppedImage:CGRectMake(origin.x, origin.y, shorterLength, shorterLength)];
    }
    outputImage = [imageForProcessing resizedImage:targetSize interpolationQuality:quality];
    return outputImage;
}

// fix image orientation, which may wrongly rotate the output.
- (UIImage *)normalizedImage {
    if (self.imageOrientation == UIImageOrientationUp) return self;

    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
    [self drawInRect:(CGRect){0, 0, self.size}];
    UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return normalizedImage;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVFoundation 根据预览宽高比裁剪捕获的静态图像 的相关文章

随机推荐

  • sqlalchemy并发更新问题

    我有一张桌子 jobs 有字段id rank和日期时间started在 MySQL InnoDB 数据库中 每次进程获得作业时 它都会 检查 该作业并将其标记为已启动 以便其他进程不会对其进行处理 我希望一个带有会话的进程能够 找到排名最高
  • Netty连接限制

    我正在开发一个使用 netty 3 6 5 的应用程序服务器 我想先了解一下期权积压的完整含义 另外 为什么没有关于 serverbootstrap 选项的文档来帮助我们开发人员 我的另一个问题是如何最好地限制服务器的并发连接数以获得更好的
  • 实例和静态函数的重新声明

    class me private name public function construct name this gt name name public function work return You are working as th
  • SQL 列引用“id”不明确

    我尝试了以下选择 SELECT id name FROM v groups vg inner join people2v groups p2vg on vg id p2vg v group id where p2vg people id 0
  • 如何在 Haskell 中对列表进行分区?

    我想获取一个列表 或字符串 并将其拆分为 N 个元素的子列表 我该如何在 Haskell 中做到这一点 Example mysteryFunction 2 abcdefgh ab cd ef gh cabal update cabal in
  • 在 jquery 中启用/禁用下拉框

    我是 jQuery 新手 我想使用复选框启用和禁用下拉列表 这是我的html
  • 从 ruby​​-ncurses 中获取 256 种颜色

    我的终端有 256 种颜色 效果很好 测试脚本在这里 http www frexx de xterm 256 notes 但是当我使用 ncurses 通过 Ruby ncurses 时它停止工作 打印该页面上给出的转义序列工作正常 但是当
  • 这句话有什么道理呢? (Sun 对 Java 变量的命名约定)

    这几天我一直在引用Sun的文档中的这段话 直到现在我才停下来思考它在说什么 但我却无法理解它的意义 请记住 英语不是我的母语 命名约定 http java sun com docs codeconv html CodeConventions
  • Objective C 中需要指针对象

    一个非常基本的问题 但理解这些概念确实非常重要 在 C 或 C 语言中 我们通常不使用指针变量来存储值 即值简单地存储为 int a 10 但在 ios sdk 中 在 Objective C 中 我们使用的大多数对象都是通过用它们表示指针
  • 将 Laravel 事件订阅者排队

    我通过事件订阅者处理多个事件 而不是创建单独的事件 侦听器 我想对其中几个事件进行排队 但我还没有找到实现这一目标的方法 我已经关注官方了文档 https laravel com docs 5 2 events event subscrib
  • 如何获取适用于 Xcode 3.2 的 iPhone SDK 2.2.1?

    在我升级到 Snow Leopard 和 Xcode 3 2 后 我真的很后悔 Xcode 丢失了所有的 SDK 我是那些仍然想开发 2 2 1 的老式白痴之一 但苹果不向我提供旧的 SDK 下载 现在我很聪明 做了很多时间机器备份 但是
  • 在 .NET 中检测 3G 互联网连接

    我们的应用程序使用 RSS 从互联网下载数据 但在连接 3G 的计算机上出现连接问题 我们想要检测 3G EDGE GPRS 连接 以便我们可以更改应用程序行为 显示警告或连接状态 这将如何完成 The NetworkInterface h
  • Linkedin Ads API “dateRange”请求参数的格式是什么?

    dateRange 的正确格式是什么rest liv2 文档中当前的示例不支持它 我不明白rest li文档 确切地说 它的格式是什么 这是我提出的要求 Headers X Restli Protocol Version 2 0 0 Aut
  • 如何在 IntelliJ 中使用拖放来实现 java swing

    我正在使用 IntelliJ 使用 swing 进行 java 应用程序开发 使用布局管理器管理内容很困难 那么 是否有任何工具可以像 Visual Studio for vb net 一样提供拖放功能 您可以使用 IntelliJ GUI
  • 本地化 Laravel

    我一直在尝试更新网站的语言 控制器 public function getUpdateLanguage Request request request data request gt all Session put locale reque
  • 如何获取当前类的类型?

    这有点难以解释 但我到处都找过了 但找不到任何好的答案 我还看到了 Stack Overflow 的问题如何引用 Java 中接口实现的类类型 https stackoverflow com questions 8161712 how ca
  • #include 在 main() 函数中

    我想知道里面是否有可能main 来自 C 的函数来包含一些东西 例如 在 Cell 程序中 我定义了 cache api h 的参数 稍后将在main 我想改变的功能 我明白什么是定义的 define可以是未定义的 undef程序中的任何位
  • OmniAuth::NoSessionError - 您必须提供会话才能使用 OmniAuth。 (在设备中配置)

    您好 我正在学习如何使用omniauth 作为 ember 应用程序的后端 当我运行我的应用程序时 我收到下面提到的错误 OmniAuth NoSessionError 您必须提供会话才能使用 OmniAuth 在救援轨道上 我的应用程序在
  • 如何使这个 JS 函数异步?

    function takesTime for var i 0 i
  • AVFoundation 根据预览宽高比裁剪捕获的静态图像

    我的问题与这个问题大多相似 裁剪 AVCaptureSession 捕获的图像 https stackoverflow com questions 5780580 cropping image captured by avcapturese