使用相机会话拍摄的裁剪图像

吉卡斯

我正在尝试裁剪具有特定兴趣的相机会话捕获的图像。为了找到比例作物rect我正在使用previewLayer.metadataOutputRectConverted方法。但是裁剪后我得到了错误的比率。

调试示例:

(lldb) po rectOfInterest.width / rectOfInterest.height
0.7941176470588235

(lldb) po image.size.width / image.size.height
0.75

(lldb) po outputRect.width / outputRect.height
0.9444444444444444

(lldb) po Double(cropped.width) / Double(cropped.height)
0.7080152671755725

除错

如您所见,我希望裁剪后的图像比例~0.79rectOfInterest我用于裁剪的比例相同

方法:

private func makeImageCroppedToRectOfInterest(from image: UIImage) -> UIImage {
    let previewLayer = cameraController.previewLayer
    let rectOfInterest = layoutLayer.layoutRect

    let outputRect = previewLayer.metadataOutputRectConverted(fromLayerRect: rectOfInterest)

    guard let cgImage = image.cgImage else {
        return image
    }

    let width = CGFloat(cgImage.width)
    let height = CGFloat(cgImage.height)

    let cropRect = CGRect(x: outputRect.origin.x * width,
                          y: outputRect.origin.y * height ,
                          width: outputRect.size.width * width,
                          height: outputRect.size.height * height)

    guard let cropped = cgImage.cropping(to: cropRect) else {
        return image
    }

    return UIImage(cgImage: cropped, scale: image.scale, orientation: image.imageOrientation)
}

目标矩形: 在此处输入图片说明

恩里科萨

我不是专家,但我认为您误解了该metadataOutputRectConverted方法的用法。您的代码无法以相同的长宽比返回裁剪后的图像,因为您实际上是在互不相乘(实际上是无关的数字

你可以试试这个方法

previewLayer.layerRectConverted(fromMetadataOutputRect: CGRect(x: 0, y: 0, width: 1, height: 1))

弄清楚从中进行的实际计算metadataOututRectConverted是什么。

我想您可以更好地解释您想要实现的目标,或者提供一个示例项目(或者至少提供一些有关您正在使用的实际图像/矩形的上下文),以帮助我们进行调试(如果您想要更多)对此有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不使用位图裁剪相机拍摄的图像

来自分类Dev

调整相机拍摄的图像大小而不会裁剪

来自分类Dev

如何从相机裁剪图像

来自分类Dev

Android向使用相机拍摄的照片添加图像

来自分类Dev

删除使用特定相机拍摄的所有图像

来自分类Dev

使用霍夫曼编码压缩 iPhone 相机拍摄的图像

来自分类Dev

放入从相机或自己的相机拍摄的帧图像

来自分类Dev

从相机胶卷导入图像并裁剪

来自分类Dev

使用javascript拍摄cordova相机

来自分类Dev

试图显示从相机意图拍摄的图像

来自分类Dev

Android用相机拍摄多个图像

来自分类Dev

将从相机拍摄的图像设置为ImageView

来自分类Dev

拍摄图像时在相机上绘制文字

来自分类Dev

如何在Android中手动保存图像(使用相机拍摄)

来自分类Dev

将使用相机拍摄的图像上传到 React Native 上的 firebase 存储

来自分类Dev

将图像(使用相机意图拍摄)从 ImageView 保存到设备(图库/SdCard)

来自分类Dev

选择了闪光模式,但相机 2 不会使用这些闪光模式拍摄图像

来自分类Dev

使用Javascript裁剪图像(裁剪)

来自分类Dev

如何使用相机拍摄影像?

来自分类Dev

使用相机拍摄照片并将图像滤镜应用于照片,但是滤镜需要时间才能应用于图像

来自分类Dev

如何告诉默认设备相机应用不要拍摄最大的图像,而是拍摄较小的图像?

来自分类Dev

如何告诉默认设备相机应用不要拍摄最大的图像,而是拍摄较小的图像?

来自分类Dev

使用坐标裁剪图像

来自分类Dev

使用CSS裁剪图像

来自分类Dev

将相机拍摄的图像转换为base64-Ionic

来自分类Dev

相机拍摄的文件不存在android图像

来自分类Dev

如何在树莓派中设置相机以拍摄黑白图像?

来自分类Dev

Android:自定义相机拍摄的图像太暗

来自分类Dev

如何在相机拍摄的图像上添加相框并保存

Related 相关文章

  1. 1

    不使用位图裁剪相机拍摄的图像

  2. 2

    调整相机拍摄的图像大小而不会裁剪

  3. 3

    如何从相机裁剪图像

  4. 4

    Android向使用相机拍摄的照片添加图像

  5. 5

    删除使用特定相机拍摄的所有图像

  6. 6

    使用霍夫曼编码压缩 iPhone 相机拍摄的图像

  7. 7

    放入从相机或自己的相机拍摄的帧图像

  8. 8

    从相机胶卷导入图像并裁剪

  9. 9

    使用javascript拍摄cordova相机

  10. 10

    试图显示从相机意图拍摄的图像

  11. 11

    Android用相机拍摄多个图像

  12. 12

    将从相机拍摄的图像设置为ImageView

  13. 13

    拍摄图像时在相机上绘制文字

  14. 14

    如何在Android中手动保存图像(使用相机拍摄)

  15. 15

    将使用相机拍摄的图像上传到 React Native 上的 firebase 存储

  16. 16

    将图像(使用相机意图拍摄)从 ImageView 保存到设备(图库/SdCard)

  17. 17

    选择了闪光模式,但相机 2 不会使用这些闪光模式拍摄图像

  18. 18

    使用Javascript裁剪图像(裁剪)

  19. 19

    如何使用相机拍摄影像?

  20. 20

    使用相机拍摄照片并将图像滤镜应用于照片,但是滤镜需要时间才能应用于图像

  21. 21

    如何告诉默认设备相机应用不要拍摄最大的图像,而是拍摄较小的图像?

  22. 22

    如何告诉默认设备相机应用不要拍摄最大的图像,而是拍摄较小的图像?

  23. 23

    使用坐标裁剪图像

  24. 24

    使用CSS裁剪图像

  25. 25

    将相机拍摄的图像转换为base64-Ionic

  26. 26

    相机拍摄的文件不存在android图像

  27. 27

    如何在树莓派中设置相机以拍摄黑白图像?

  28. 28

    Android:自定义相机拍摄的图像太暗

  29. 29

    如何在相机拍摄的图像上添加相框并保存

热门标签

归档