如何在ios中使用3D效果调整图像大小。
我想调整图像大小,并通过拾取任意角拉伸图像。 供参考。我想在ios native中使用CGContext或BazirPath开发相同的效果 请让我知道如何在ios中做这样的事情。提供进行此类图像操作的任何参考。我的项目在swift 3中。所以这是我的首选 如果您只想更改角点,则过滤器将允许您执行此操作。如果您希望能够像在photoshop中那样以bezier路径编辑所有网格点,并调整图像扭曲,则需要执行一些3D数学,将面片细分为三角形,并将图像作为纹理应用于生成的几何体 无论如何,这里有一个游乐场,演示了如何使用密码透视变换:如何在ios中使用3D效果调整图像大小。,ios,iphone,image-processing,swift3,image-resizing,Ios,Iphone,Image Processing,Swift3,Image Resizing,我想调整图像大小,并通过拾取任意角拉伸图像。 供参考。我想在ios native中使用CGContext或BazirPath开发相同的效果 请让我知道如何在ios中做这样的事情。提供进行此类图像操作的任何参考。我的项目在swift 3中。所以这是我的首选 如果您只想更改角点,则过滤器将允许您执行此操作。如果您希望能够像在photoshop中那样以bezier路径编辑所有网格点,并调整图像扭曲,则需要执行一些3D数学,将面片细分为三角形,并将图像作为纹理应用于生成的几何体 无论如何,这里有一个游乐
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)
github上有一个可用的库:(它是用Objective-C开发的,但您可以在Swift 3项目中使用它) 如果从零开始,这种转换就不那么容易,即使CoreGraphic功能强大,学习的过程也很艰难 正如您在这里看到的,它基于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
#导入
#进口
#进口
#导入“AGKBaseDefines.h”
开始吧
CGImageRef CgImageDrawwith CATTransferorM3D_AGK(CGImageRef imageRef,
CATTransformorM3D转换,
CGPoint主播点,
CGSize大小,
CGFloat scale)CF_返回保留的值;
AGK_EXTERN_C_END
您可以设置水平和垂直效果:
垂直效应
let verticalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.y",
type: .TiltAlongVerticalAxis)
verticalMotionEffect.minimumRelativeValue = -10
verticalMotionEffect.maximumRelativeValue = 10
let horizontalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.x",
type: .TiltAlongHorizontalAxis)
horizontalMotionEffect.minimumRelativeValue = -10
horizontalMotionEffect.maximumRelativeValue = 10
let group = UIMotionEffectGroup()
group.motionEffects = [horizontalMotionEffect, verticalMotionEffect]
myBackgroundView.addMotionEffect(group)
水平效应
let verticalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.y",
type: .TiltAlongVerticalAxis)
verticalMotionEffect.minimumRelativeValue = -10
verticalMotionEffect.maximumRelativeValue = 10
let horizontalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.x",
type: .TiltAlongHorizontalAxis)
horizontalMotionEffect.minimumRelativeValue = -10
horizontalMotionEffect.maximumRelativeValue = 10
let group = UIMotionEffectGroup()
group.motionEffects = [horizontalMotionEffect, verticalMotionEffect]
myBackgroundView.addMotionEffect(group)
看看我的答案。这是同样的事情,但问题是关于使用WindowsGDI而不是iOS的核心图形。但是,答案与平台无关。@答案图像中的user1118321是正确的。但是我想要openGL中的源代码或任何参考。