Core Image 制作自己的美图秀秀

一、Core Image是和啥?

关于这个问题不太好回答,但其实又也很简单。肯定是苹果推出的关于图片处理的API。网上各路大神都有解释过,不过能看明白的不多,我的理解就是Photoshop的滤镜,当然在各种美图软件里都有这个功能,咱主要看怎么用吧

二、Core Image提供了哪些可用的滤镜呢?

127 values
 {
  [0] = "CIAccordionFoldTransition"
  [1] = "CIAdditionCompositing"
  [2] = "CIAffineClamp"
  [3] = "CIAffineTile"
  [4] = "CIAffineTransform"
  [5] = "CIAreaHistogram"
  [6] = "CIAztecCodeGenerator"
  [7] = "CIBarsSwipeTransition"
  [8] = "CIBlendWithAlphaMask"
  [9] = "CIBlendWithMask"
  [10] = "CIBloom"
  [11] = "CIBumpDistortion"
  [12] = "CIBumpDistortionLinear"
  [13] = "CICheckerboardGenerator"
  [14] = "CICircleSplashDistortion"
  [15] = "CICircularScreen"
  [16] = "CICode128BarcodeGenerator"
  [17] = "CIColorBlendMode"
  [18] = "CIColorBurnBlendMode"
  [19] = "CIColorClamp"
  [20] = "CIColorControls"
  [21] = "CIColorCrossPolynomial"
  [22] = "CIColorCube"
  [23] = "CIColorCubeWithColorSpace"
  [24] = "CIColorDodgeBlendMode"
  [25] = "CIColorInvert"
  [26] = "CIColorMap"
  [27] = "CIColorMatrix"
  [28] = "CIColorMonochrome"
  [29] = "CIColorPolynomial"
  [30] = "CIColorPosterize"
  [31] = "CIConstantColorGenerator"
  [32] = "CIConvolution3X3"
  [33] = "CIConvolution5X5"
  [34] = "CIConvolution9Horizontal"
  [35] = "CIConvolution9Vertical"
  [36] = "CICopyMachineTransition"
  [37] = "CICrop"
  [38] = "CIDarkenBlendMode"
  [39] = "CIDifferenceBlendMode"
  [40] = "CIDisintegrateWithMaskTransition"
  [41] = "CIDissolveTransition"
  [42] = "CIDivideBlendMode"
  [43] = "CIDotScreen"
  [44] = "CIEightfoldReflectedTile"
  [45] = "CIExclusionBlendMode"
  [46] = "CIExposureAdjust"
  [47] = "CIFalseColor"
  [48] = "CIFlashTransition"
  [49] = "CIFourfoldReflectedTile"
  [50] = "CIFourfoldRotatedTile"
  [51] = "CIFourfoldTranslatedTile"
  [52] = "CIGammaAdjust"
  [53] = "CIGaussianBlur"
  [54] = "CIGaussianGradient"
  [55] = "CIGlassDistortion"
  [56] = "CIGlideReflectedTile"
  [57] = "CIGloom"
  [58] = "CIHardLightBlendMode"
  [59] = "CIHatchedScreen"
  [60] = "CIHighlightShadowAdjust"
  [61] = "CIHistogramDisplayFilter"
  [62] = "CIHoleDistortion"
  [63] = "CIHueAdjust"
  [64] = "CIHueBlendMode"
  [65] = "CILanczosScaleTransform"
  [66] = "CILightenBlendMode"
  [67] = "CILightTunnel"
  [68] = "CILinearBurnBlendMode"
  [69] = "CILinearDodgeBlendMode"
  [70] = "CILinearGradient"
  [71] = "CILinearToSRGBToneCurve"
  [72] = "CILineScreen"
  [73] = "CILuminosityBlendMode"
  [74] = "CIMaskToAlpha"
  [75] = "CIMaximumComponent"
  [76] = "CIMaximumCompositing"
  [77] = "CIMinimumComponent"
  [78] = "CIMinimumCompositing"
  [79] = "CIModTransition"
  [80] = "CIMultiplyBlendMode"
  [81] = "CIMultiplyCompositing"
  [82] = "CIOverlayBlendMode"
  [83] = "CIPerspectiveCorrection"
  [84] = "CIPhotoEffectChrome"
  [85] = "CIPhotoEffectFade"
  [86] = "CIPhotoEffectInstant"
  [87] = "CIPhotoEffectMono"
  [88] = "CIPhotoEffectNoir"
  [89] = "CIPhotoEffectProcess"
  [90] = "CIPhotoEffectTonal"
  [91] = "CIPhotoEffectTransfer"
  [92] = "CIPinchDistortion"
  [93] = "CIPinLightBlendMode"
  [94] = "CIPixellate"
  [95] = "CIQRCodeGenerator"
  [96] = "CIRadialGradient"
  [97] = "CIRandomGenerator"
  [98] = "CISaturationBlendMode"
  [99] = "CIScreenBlendMode"
  [100] = "CISepiaTone"
  [101] = "CISharpenLuminance"
  [102] = "CISixfoldReflectedTile"
  [103] = "CISixfoldRotatedTile"
  [104] = "CISmoothLinearGradient"
  [105] = "CISoftLightBlendMode"
  [106] = "CISourceAtopCompositing"
  [107] = "CISourceInCompositing"
  [108] = "CISourceOutCompositing"
  [109] = "CISourceOverCompositing"
  [110] = "CISRGBToneCurveToLinear"
  [111] = "CIStarShineGenerator"
  [112] = "CIStraightenFilter"
  [113] = "CIStripesGenerator"
  [114] = "CISubtractBlendMode"
  [115] = "CISwipeTransition"
  [116] = "CITemperatureAndTint"
  [117] = "CIToneCurve"
  [118] = "CITriangleKaleidoscope"
  [119] = "CITwelvefoldReflectedTile"
  [120] = "CITwirlDistortion"
  [121] = "CIUnsharpMask"
  [122] = "CIVibrance"
  [123] = "CIVignette"
  [124] = "CIVignetteEffect"
  [125] = "CIVortexDistortion"
  [126] = "CIWhitePointAdjust"
}

目前来说提供了127个,我给你查出来了,你自己看着用吧,向Core Image的kCICategoryBuiltIn类别请求得到滤镜的名字

let filterNames = CIFilter.filterNamesInCategory(kCICategoryBuiltIn) as [String]

三、滤镜的基本使用

3.1 创建一个滤镜(使用滤镜名称,传给滤镜的初始化方法CIFilter就创建成功了)

let blurFilter=CIFilter(named:"CIGaussianBlur")

3.2 设置滤镜参数

滤镜的参数(比如上面创建了一个模糊滤镜)一般都是通过KVC的方式设置的,如下代码设置了模糊滤镜的模糊半径参数

blurFilter.setValue(12.0 forKey:"inputRadius")

3.3 创建使用滤镜的图像

Core Image要求使用滤镜的图像是CIImage类型,跟我们常用的UIImage不同,不过也很容易从UIImage创建,只需一行代码就能搞定

let inputImage=CIImage(image: sourceImageView.image)

3.4 将滤镜应用到图像上(其实是设置滤镜的一个很重要的属性:inputImage)

blurFilter.setValue(inputImage, forKey: "inputImage")

3.5 得到一个滤镜处理后的图片

处理后的图片是在当前的滤镜渲染上下文中,故而必须先得到当前的上下文,咱一切从简

let ciContext=CIContext(options: nil)

从当前的上下文中得到输出的图片,当然这也是一个CIImage类型的图啦,传入的参数就是滤镜的属性:outputImage

let cgImage = ciContext.createCGImage(blurFilter.outputImage, fromRect: inputImage.extent())

从这个CIImage也是一句代码得到我们熟悉的UIImage

resultImageView.image=UIImage(CGImage: cgImage)

得到的结果直接上图片

很明显的模糊效果出来啦……鼓掌吧别愣着了

————————————————————————————————————————————————————————————————————————

一个图片绝不仅仅只能施加一种滤镜效果,我们可以创建多个滤镜组成一条滤镜渲染的链条,只不过要注意每个滤镜的inputImage属性都是上一个滤镜的输出属性:inputImage,在上面给小猫咪模糊的基础上,我来改造下,让原图不仅高斯模糊,在添加一个单色滤镜,在添加一个晕影滤镜

//创建输入图像
        let inputImage=CIImage(image: sourceImageView.image)
        //构建一个滤镜图表
        let sepiaColor=CIColor(red: 0.6, green: 0.65, blue: 0.54)
        let monochromeFilter=CIFilter(name: "CIColorMonochrome", withInputParameters:["inputColor":sepiaColor,"inputIntensity":1.0])
        monochromeFilter.setValue(inputImage, forKey: "inputImage")

        let blurFilter=CIFilter(name: "CIGaussianBlur")
        blurFilter.setValue(3.0, forKey: "inputRadius")
        blurFilter.setValue(monochromeFilter.outputImage, forKey: "inputImage")

        let vignetterFilter=CIFilter(name: "CIVignette", withInputParameters:["inputRadius":1.75,"inputIntensity":1.0])
        vignetterFilter.setValue(blurFilter.outputImage, forKey: "inputImage")

        let outputImage=vignetterFilter.outputImage

        //得到一个滤镜处理后的图片
        let ciContext=CIContext(options: nil)
        let cgImage=ciContext.createCGImage(outputImage, fromRect: inputImage.extent())
        resultImageView.image=UIImage(CGImage: cgImage)

可以看到第一个单色滤镜monochromeFilter的inputImage就是原图像:monochromeFilter.setValue(inputImage, forKey: "inputImage")

第二个高斯模糊的滤镜blurFilter的inputImage是前一个滤镜的输出outputImage:blurFilter.setValue(monochromeFilter.outputImage, forKey: "inputImage")

第三个晕影的滤镜vignetterFilter的inputImage是前一个滤镜的输出outputImage:vignetterFilter.setValue(blurFilter.outputImage, forKey: "inputImage")

同时也看到滤镜的属性可以在创建的时候就设置上去

let vignetterFilter=CIFilter(name: "CIVignette", withInputParameters:["inputRadius":1.75,"inputIntensity":1.0])

最后附上三个滤镜的叠加效果,具体效果可根据参数的不同任意变幻

去制作你自己的美图秀秀吧……

时间: 2024-07-29 06:39:33

Core Image 制作自己的美图秀秀的相关文章

简单的水印制作之美图秀秀

大家的博文或者QQ空间文章等,都喜欢印上自己的水印,以避免有心之人的盗图等问题的发生,但是部分朋友(包括我的老师老男孩 =.=)都直接使用画图工具简单的写了个名字或者域名上去,就算是水印了,老师呀--不是学生嫌弃你,咱可以再懒点不 =.= 其实单纯的一个水印制作非常的简单,使用Windows操作系统的朋友可以直接使用"美图秀秀"来制作水印. 1.下载安装美图秀秀. http://xiuxiu.dl.meitu.com/XiuXiu_360Setup_4.0.1.exe 2.打开美图秀秀

强大的Core Image(教你做自己的美图秀秀))

iOS5新特性:强大的Core Image(教你做自己的美图秀秀)) iOS5给我们带来了很多很好很强大的功能和API.Core Image就是其中之一,它使我们很容易就能处理图片的各种效果,色彩啊,曝光啊,饱和度啊,变形啊神马的.可惜苹果一直没能完善官方文档,也没有推出示例代码,所以国内很多同学可能还没有开始使用.但国外的大神们已经证明这是个相当强悍的框架,不仅功能强大,而且可以直接使用GPU,效率奇高,甚至可以实时的对视频进行渲染.下面让我们来看看,如何具体使用它:首先你需要导入 CoreI

美图秀秀一寸照片的制作

在浏览器里搜索美图秀秀,并点击下载 2安装之后,打开美图秀秀,选择图片美化 3选择打开一张图片,添加需要修改的图片 4此时图片添加完成,点击左侧的尺寸修改 5点击取消锁定高宽比例 6修改高宽尺寸为344×482,点击确定 7点击右上方的保存与分享 8点击保存,即可完成一寸照片的制作 原文地址:https://www.cnblogs.com/allyh/p/10416061.html

iOS开发系列--打造自己的“美图秀秀”

http://www.cnblogs.com/kenshincui/p/3959951.html#overview --绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2D绘制2D图形和Core Image中强大的滤镜功能. Quartz 2D 基本图形绘制 视图刷新 其他图形上下文 Core Image Quartz 2D 在iOS中常用的绘图框

打造自己的“美图秀秀”

概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2D绘制2D图形和Core Image中强大的滤镜功能. Quartz 2D 在iOS中常用的绘图框架就是Quartz 2D,Quartz 2D是Core Graphics框架的一部分,是一个强大的二维图像绘制引擎.Quartz 2D在UIKit中也有很好的封装和集成,我们日常开发时所用到的UIKit中的组件都是由Cor

美图秀秀-美化图片之【特效】界面设计

本文是特效界面设计,在美图秀秀的特效模块主要是实现图片添加滤镜效果,界面挺炫的. 界面包含黑边和虚化按钮,4种类型的滤镜,每种类型又包含许多具体滤镜效果,当我们点击时候开始处理图片 1.加载图片 self.imageView = [[UIImageView alloc] initWithImage:self.image]; self.imageView.frame = CGRectMake(0, 0, WIDTH, HEIGHT - 130); self.imageView.contentMod

美图秀秀团队新出的短视频应用「美拍」为何这么火?

这个世界有种畅销品叫作“美”它的载体通常是可视化的——图片和视频,美图这个团队从美图秀秀到美拍无不是抓住了这个需求,让人更容易生产更高质量的美.而且视频这种信息量更大的载体相对静止的图片更能让人产生“美”的体验,视频和图片不一样,不像instagram那样加个风格滤镜就能产生一个好的效果,而且要拍好一段视频远比照片要难的多,所以此前一些微视频软件简单的加个滤镜或一些水印并不能帮助用户比较简单的生产出有美感的视频.这点美拍做到了,你发现一段再无趣的视频套用模板后,音乐和剪切效果马上让视频脱胎换骨,

美图秀秀首页界面设计(一)

本文设计了美图秀秀官方版的界面,从中可以学到自定义View,自动布局,启动界面设置.代码有点凌乱,我在一步步改善. 项目中的图片资源均来自官方版的下载包中的图片(原始图片),这样我们可以通过模仿成功案例来学习iOS开发. 项目结构及介绍 category组中存放对类的扩展 Utiles中存放一些常用的代码 controller中存放viewController文件 network存放访问网络的工具类 3rd lib存放项目中使用到的第三方类库 views存放自定义视图 models存放数据类 i

美图秀秀滤镜之亮度调整

图像的亮度, 指的是图像像素的强度, 黑色为最暗, 白色为最亮, 在ios中黑色用0来表示, 白色用1来表示.一个像素, 基本上是用RGB三个颜色分量来表示的. R(0-1), G(0-1),B(0-1). 亮度调整有多种计算方法,效果并不完全相同,在颜色的表示方法中, HSL(L)表示法就是:色相(hue).饱和度(saturation).亮度(lightness),改变其中的L值就可以调整图象的亮度,但效果显得比较生硬. PhotoShop和GPUImage中采用的就是另外一种方法就是把图象