【问题标题】:Set dimensions for UIImagePickerController "move and scale" cropbox为 UIImagePickerController“移动和缩放”裁剪框设置尺寸
【发布时间】:2012-02-20 22:34:01
【问题描述】:

“移动和缩放屏幕”如何确定其裁剪框的尺寸?

基本上我想为“CropRect”设置一个固定的宽度和高度,并让用户根据需要移动和缩放他的图像以适应该框。

有人知道怎么做吗? (或者如果它甚至可以使用 UIImagePickerController)

谢谢!

【问题讨论】:

  • 有人可以为 swift 提供相同的解决方案吗?

标签: ios cocoa-touch ipad uiimagepickercontroller crop


【解决方案1】:

不幸的是,UIImagePickerController 不可能。我推荐的解决方案是禁用图像选择器的编辑并自己处理。例如,我将图像放在可滚动、可缩放的图像视图中。在图像视图的顶部是一个固定位置的“裁剪指南视图”,用于绘制用户看到的裁剪指示器。假设引导视图具有可见矩形(要保留的部分)和边缘宽度(要丢弃的部分)的属性,您可以像这样获得裁剪矩形。您可以使用UIImage+Resize 类别进行实际裁剪。

CGRect cropGuide = self.cropGuideView.visibleRect;
UIEdgeInsets edges = self.cropGuideView.edgeWidths;
CGPoint cropGuideOffset = self.cropScrollView.contentOffset;

CGPoint origin = CGPointMake( cropGuideOffset.x + edges.left, cropGuideOffset.y + edges.top );
CGSize size = cropGuide.size;
CGRect crop = { origin, size };

crop.origin.x = crop.origin.x / self.cropScrollView.zoomScale;
crop.origin.y = crop.origin.y / self.cropScrollView.zoomScale;
crop.size.width = crop.size.width / self.cropScrollView.zoomScale;
crop.size.height = crop.size.height / self.cropScrollView.zoomScale;

photo = [photo croppedImage:crop];

【讨论】:

  • 能否请您提供示例项目或其他任何东西。
  • @Marc。你如何指导我如何使用 swift
【解决方案2】:

游戏有点晚了,但我认为这可能是您正在寻找的:https://github.com/gekitz/GKImagePicker

【讨论】:

  • 好吧,我在未来的土地上肯定很感激!
  • 我爱你,这为我节省了很多时间。
  • 相机如何使用?
  • 如何在图像选择器出现时为它制作更大的尺寸?
  • 在 iOS7 中有点问题,我会寻找另一种解决方案(目前是我自己)。
【解决方案3】:

这是Ming Yang手动裁剪的解决方案。 https://github.com/myang-git/iOS-Image-Crop-View

它提供了一个矩形框架,用户可以滑动或拖动它以适应矩形中所需的图像部分。请注意,此解决方案与所提出的问题相反 - 让矩形大小发生变化,但最终会带来所需的结果。

它是用 Objective-C 编码的。您可能必须在 Swift 中对其进行编码,或者只是构建一个桥接头来将 Objective-C 代码与 Swift 代码连接起来。

【讨论】:

  • 比我找到的任何其他库都好。
【解决方案4】:

现在已经晚了,但可能对某人有用。这是我用于 swift 的库(非常感谢Tim Oliver):

TOCropViewController

如上面 GitHub 链接中的 README 文件中所述,通过使用此库,您可以获得用户定义的矩形和圆形模式的裁剪图像,例如用于更新个人资料图像。 以下是来自 GitHub 的示例代码:

func presentCropViewController {
  let image: UIImage = ... //Load an image

  let cropViewController = CropViewController(image: image)
  cropViewController.delegate = self
  present(cropViewController, animated: true, completion: nil)
}

func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
        // 'image' is the newly cropped version of the original image
    }

【讨论】:

  • 欢迎来到 Stack Overflow!虽然链接是分享知识的好方法,但如果它们在未来被破坏,它们将无法真正回答问题。将回答问题的链接的基本内容添加到您的答案中。如果内容太复杂或太大而无法在此处放置,请描述所提出解决方案的总体思路。请记住始终保留指向原始解决方案网站的链接引用。见:How do I write a good answer?
猜你喜欢
  • 2012-11-30
  • 2012-10-18
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 2013-04-09
  • 2016-04-14
  • 1970-01-01
相关资源
最近更新 更多