我想通过挑选任何角落来调整图像大小并拉伸图像。 供参考Check Video。我想使用CGContext或使用BazirPath在ios native中开发相同的效果。
请告诉我如何在ios中做这样的事情。提供任何参考来进行这种图像操作。我的项目很快3.所以这是我的首选。
答案 0 :(得分:2)
github上有一个库:(它是用Objective-C开发的,但你可以在你的Swift 3项目中使用它)
如果从头开始,这种转变并不那么容易,即使CoreGraphic功能强大,学习坡度也很难。
https://github.com/agens-no/AGGeometryKit
正如您在此处所看到的,它基于CoreGraphic,因此您可以使用CGContext和UIBezierPath
#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
#import <UIKit/UIKit.h>
#import "AGKBaseDefines.h"
AGK_EXTERN_C_BEGIN
CGImageRef CGImageDrawWithCATransform3D_AGK(CGImageRef imageRef,
CATransform3D transform,
CGPoint anchorPoint,
CGSize size,
CGFloat scale) CF_RETURNS_RETAINED;
AGK_EXTERN_C_END
答案 1 :(得分:1)
CIPerspectiveTransform过滤器可让您执行此操作,只需更改角落即可。如果您希望能够将所有网格点编辑为像photoshop中的bezier路径并且要调整图像扭曲,那么您需要进行一些3D数学运算,将补丁镶嵌到三角形并将图像作为纹理应用于产生几何。
无论如何,这里有一个操场,说明如何使用CIPerspective转换:
import UIKit
import PlaygroundSupport
let uiImage = UIImage(named: "a.png")!
let image = CIImage(image: uiImage)!
let filter = CIFilter(name: "CIPerspectiveTransform")!
let topLeft = CGPoint(x: -10, y: 0)
let bottomLeft = CGPoint(x: 100, y: uiImage.size.height)
let topright = CGPoint(x: uiImage.size.width, y: -20)
let bottomright = CGPoint(x: uiImage.size.width, y:uiImage.size.height)
filter.setValue(CIVector(cgPoint:topLeft), forKey: "inputTopLeft")
filter.setValue(CIVector(cgPoint:topright), forKey: "inputTopRight")
filter.setValue(CIVector(cgPoint:bottomright), forKey: "inputBottomRight")
filter.setValue(CIVector(cgPoint:bottomLeft), forKey: "inputBottomLeft")
filter.setValue(image, forKey: kCIInputImageKey)
let transformedImage = UIImage(ciImage: filter.outputImage!)
PlaygroundPage.current.liveView = UIImageView(image: transformedImage)
答案 2 :(得分:0)
您可以设置水平效果和垂直效果:
垂直效果
<div id="mychatcontainer"></div>
横向效果
let verticalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.y",
type: .TiltAlongVerticalAxis)
verticalMotionEffect.minimumRelativeValue = -10
verticalMotionEffect.maximumRelativeValue = 10