我现在一直在抨击这一个人几天,即使我不断地感觉到我在启示的边缘,我根本无法实现我的目标 .
我认为,在我的设计的概念阶段提前,从iPhone的相机或库中获取图像,使用相当于UIImageView的 Aspect Fill 选项的功能将其缩小到指定高度将是一件小事 . (完全在代码中),然后 crop off 任何不适合传递的CGRect的东西 .
从相机或图书馆获取原始图像非常简单 . 我很震惊其他两个步骤的难度 .
附图显示了我想要实现的目标 . 有人请你好好握住我的手吗?到目前为止我发现的每个代码示例似乎都会破坏图像,颠倒过来,看起来像废话,画出界限,或者其他方法都不能正常工作 .
16 回答
Swift版本:
这是Jane Sales在Swift中的回答版本 . 干杯!
干得好 . 这个很完美;-)
编辑:见下面的评论 - “不适用于某些图像,失败:CGContextSetInterpolationQuality:无效的上下文0x0错误”
下面的工作示例:左图像 - (原始图像);右图像,刻度为x2
如果要缩放图像但保留其帧(比例),请按以下方式调用方法:
我发现由Evgenii Kanvets发布的Swift 3并没有统一缩放图像 .
这是我的Swift 4版本的功能,不会压缩图像:
我需要同样的东西 - 在我的情况下,选择适合缩放的尺寸,然后裁剪每一端以使其余部分适合宽度 . (我在横向工作,所以可能没有注意到肖像模式中的任何缺陷 . )这是我的代码 - 它是UIImage的一个类似的一部分 . 我的代码中的目标大小始终设置为设备的全屏大小 .
这个问题似乎已经得到了解决,但在我寻求一个我可以更容易理解的解决方案(并用Swift编写)中,我到达了这个(也发布到:How to crop the UIImage?)
我希望能够根据宽高比从区域进行裁剪,并根据外部边界范围缩放到大小 . 这是我的变化:
我发现有一些令人困惑的事情,即裁剪和调整大小的单独问题 . 使用传递给drawInRect的rect的原点处理裁剪,并且缩放由size部分处理 . 在我的情况下,我需要将源上裁剪矩形的大小与相同宽高比的输出矩相关联 . 然后输出/输入比例因子,这需要应用于drawRect(传递给drawInRect) .
需要注意的是,这种方法有效地假设您绘制的图像大于图像上下文 . 我没有对此进行测试,但我认为您可以使用此代码来处理裁剪/缩放,但明确将scale参数定义为上述缩放参数 . 默认情况下,UIKit根据屏幕分辨率应用乘数 .
最后,应该注意的是,这种UIKit方法比CoreGraphics / Quartz和Core Image方法更高级,并且似乎处理图像方向问题 . 值得一提的是,它非常快,仅次于ImageIO,根据这篇文章:http://nshipster.com/image-resizing/
然后你可以通过这个屏幕拍摄你的图像
有一些很好的代码与调整其他几个操作的图像大小有关 . 当我试图想象你如何调整图像大小时,我来到了这个... http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
我修改了Brad Larson的代码 . 它会在给定的rect中填充图像 .
我转换了Sam Wirch's guide to swift并且它对我很有用,尽管有解决方法 .
如果有人想要客观的c版本,那就在他的网站上 .
accepted answer on how to resize and then crop UIImage (Aspect Fill)的Xamarin.iOS版本如下
较旧的帖子包含调整UIImage大小的方法的代码 . 相关部分如下:
就裁剪而言,我相信如果你改变方法使用不同的缩放大小而不是上下文,你的结果图像应该被剪裁到上下文的边界 .
我提出这个 . 她不是美女吗? ;)
以下简单代码对我有用 .
这是William T.发布的Sam Wirch's guide to swift的Swift 3版本