在SWIFT编程中,如何裁剪图像并将其放在中心位置?
这就是我到目前为止得到的..。我已经成功地裁剪了图像,但我想在之后把它放在中间
ImgView.image = OrigImage
var masklayer = CAShapeLayer()
masklayer.frame = ImgView.frame
masklayer.path = path.CGPath
masklayer.fillColor = UIColor.whiteColor().CGColor
masklayer.backgroundColor = UIColor.clearColor().CGColor
ImgView.layer.mask = masklayer
UIGraphicsBeginImageContext(ImgView.bounds.size);
ImgView.layer.renderInContext(UIGraphicsGetCurrentContext())
var image = UIGraphicsGetImageFromCurrentImageContext()
ImgView.image = image
UIGraphicsEndImageContext();
更新:
let rect: CGRect = CGRectMake(path.bounds.minX, path.bounds.minY, path.bounds.width, path.bounds.height)
// Create bitmap image from context using the rect
let imageRef: CGImageRef = CGImageCreateWithImageInRect(image.CGImage, rect)
ImgView.bounds = rect
ImgView.image = UIImage(CGImage: imageRef)
我能够通过获取路径边界和大小并更改我的ImageView的边界来使其居中。:)
15条答案
按热度按时间6uxekuva1#
要获得裁剪的居中位置,可以将高度和宽度的差异减半。然后,您可以在检查图像的方向(哪个部分较长)后为新的宽度和高度指定边界
我在website上找到了大部分这些信息,如果你想进一步阅读的话。
针对SWIFT 4更新
b1payxdu2#
被接受的答案只对我来说是正确的。我需要更灵活的裁剪机制,所以我写了一个扩展,如下所示:
导入UIKit
您可以这样使用它:
如果谁有想法如何使风景,肖像和广场处理得更好一点,让我知道。
cbjzeqam3#
你可以试试这个答案。它是用斯威夫特3写的。
vwoqyblh4#
这就是答案,归功于@awolf(裁剪UIImage)。完美地处理比例和方向。只需在要裁剪的图像上调用此方法,并传入裁剪后的
CGRect
,而无需担心大小或方向。请随意检查cgImage
是否为零,而不是像我在这里所做的那样强行打开它。如果你想要裁剪矩形居中,只需做简单的数学运算。沿着……的路线
另请注意:如果您正在使用嵌入到
scrollView
中的imageView
,则还有一个额外的步骤,您必须考虑缩放因素。假设您的imageView
跨越了scrollView
的整个内容视图,并且您使用scrollView
的边界作为裁剪框架,则裁剪后的图像可以如下所示57hvy0tb5#
科尔的道具
SWIFT 3
zujrkrfu6#
SWIFT 3工作示例
e1xvtsh37#
您只需使用以下命令进行裁剪:
puruo6ea8#
在SWIFT 4.1中,我将简单地执行以下操作:
贷方至Stretching, Redrawing and Positioning with contentMode
yk9xbfzb9#
我想出了一个代码,它将提供所需的裁剪长宽比,而不考虑原始视频帧大小(改编自@Cole的答案):
希望它能帮上忙!
imzjd6km10#
被接受的答案对我不起作用,所以我试着写我自己的。以下是我工作的一个效果:
此函数将裁剪图像与给定的比例进行比较。它保持了图像的比例。裁剪后的图像始终是原始图像的中心。
doinxwow11#
您还可以非常简单地将相关的ImageView从Storyboard置于“Aspect Fill”模式,并将其添加到代码中:
efzxgjgh12#
或创建UImage扩展名
vmpqdwk313#
更改这一点:
对此:
oo7oh9g914#
您还可以使用AlamoFire和AlamoFireImage来裁剪您的图像。
https://github.com/Alamofire/AlamofireImage
使用CocoaPods
pod 'AlamofireImage'
安装用途:
zaq34kh615#
SWIFT 5
此函数的工作原理是从给定的UIImage中提取CGImage数据,然后找到照片左上角的坐标。从这个坐标开始,绘制一个等边的矩形(边长是原始图像的最短边)。
请注意,CGImage数据描述的是UIImage中 Package 的原始照片的数据,而不是UIImage默认情况下实际显示的数据。因此,需要检查图像的原始方向以确定是否需要反转x和y值。