简介
数据万象提供两种方式进行图片处理:图片自适应处理 CIResponsiveTransformation 和自定义转换处理 CITransformation。
说明:
支持格式:支持处理 JPG、BMP、GIF、PNG、WEBP 格式,并且支持 HEIF 格式的解码和处理操作。
体积限制:处理图片原图大小不超过32MB、宽高不超过30000像素且总像素不超过2.5亿像素,处理结果图宽高设置不超过9999像素;针对动图,原图宽 x 高 x 帧数不超过2.5亿像素。
动图帧数限制:gif 帧数限300帧。
相关资源
SDK 接口与参数文档请参见 SDK API。
图片自适应处理 CIResponsiveTransformation
图片自适应处理包括了格式转换(根据系统版本自动变换格式)和缩放(根据图片控件尺寸以及 ScaleType 进行缩放),相关说明如下:
1. 自适应加载 CIResponsiveTransformation。
2. 根据当前 imageView 控件尺寸自动调整图片大小。
3. 根据系统版本自动调整最优图片格式,iOS 11以下加载原格式,iOS 11及以上加载 HEIC 格式。
Objective-C
CIResponsiveTransformation * sTransform = [[CIResponsiveTransformation alloc]initWithView:imageView scaleType:ScaleTypeAUTOFit]
swift
let sTransform = CIResponsiveTransformation(view: nil, scale: ScaleType.autoFit)
自定义转换处理 CITransformation
CloudInfinite SDK 中的 CITransformation 类封装了数据万象的基础图片处理功能其中包含如下功能:
缩放
裁剪
旋转
格式转换
质量变换
高斯模糊
锐化
水印
获取图片主题色
去除图片元信息
组合操作
在使用数据万象基础图片处理功能时首先实例化 CITransformation 类,下面所有操作一致,不再重复说明。
Objective-C
CITransformation * transform = [CITransformation new];
swift
let transform = CITransformation();
缩放
说明:
按百分比缩放
Objective-C
// 以缩放百分之50为例[transform setZoomWithPercent:50 scaleType:ScalePercentTypeALL];// scaleType 可以指定如下类型:// 仅缩放宽度,高度不变ScalePercentTypeOnlyWidth = 1,// 仅缩放高度,宽度不变ScalePercentTypeOnlyHeight,//指定图片的宽高同时缩放ScalePercentTypeALL,
swift
transform.setZoomWithPercent(50, scale: ScalePercentType.ALL)
指定宽高缩放
Objective-C
// 以宽高都指定为100 并且缩放类型为 ScaleTypeAUTOFit 等比缩放[transform setZoomWithWidth:100 height:100 scaleType:ScaleTypeAUTOFit];// 在指定宽高缩放时,scaleType 可以指定的类型:// 忽略原图宽高比例,指定图片宽度为 Width,高度为 Height ,强行缩放图片,可能导致目标图片变形ScaleTypeAUTOFill = 1,// 限定缩略图的宽度和高度的最大值分别为 Width 和 Height,进行等比缩放ScaleTypeAUTOFit,// 限定缩略图的宽度和高度的最小值分别为 Width 和 Height,进行等比缩放ScaleTypeAUTOFITWithMin,// 指定目标图片宽度为 Width,高度传入0, 高度等比压缩ScaleTypeOnlyWidth,// 指定目标图片高度为 Height,宽度传0,宽度等比压缩ScaleTypeOnlyHeight
swift
transform.setZoomWithWidth(10, height: 100, scaleType: ScaleType.autoFit)
等比缩放
限制像素缩放,缩放后的图像,总像素数量不超过指定数量。
Objective-C
// 缩放后的图像,总像素数量不超过1000 为例;[transform setZoomWithArea:1000];
swift
transform.setZoomWithArea(1000)
裁剪
说明:
普通裁剪
Objective-C
// 指定目标图片宽度、高度、相对于图片左上顶点水平向右偏移、相对于图片左上顶点水平向下偏移进行裁剪为例;[transform setCutWithWidth:100 height:100 dx:30 dy:30];
swift
transform.setCutWithWidth(100, height: 100, dx: 30, dy: 30)
内切圆裁剪
radius 是内切圆的半径,取值范围为大于0且小于原图最小边一半的整数。内切圆的圆心为图片的中心。图片格式为 gif 时,不支持该参数。
Objective-C
// 指定半径100为例[transform setCutWithIRadius:100];
swift
transform.setCutWithIRadius(100)
圆角裁剪
radius 为图片圆角边缘的半径,取值范围为大于0且小于原图最小边一半的整数。圆角与原图边缘相切。图片格式为 gif 时,不支持该参数。
Objective-C
// 指定圆角半径100为例[transform setCutWithRRadius:100];
swift
transform.setCutWithRRadius(100)
缩放裁剪
说明:
Objective-C
// 指定宽高缩放裁剪,如果为0则不变;[transform setCutWithCrop:100 height:100];// 指定宽高以及 gravity 缩放裁剪;[transform setCutWithCrop:100 height:100 gravity:CIGravityCenter];
swift
transform.setCutWithCrop(100, height: 100)transform.setCutWithCrop(100, height: 100, gravity: CloudInfiniteGravity.CIGravityCenter);
人脸智能裁剪
基于图片中的人脸位置进行缩放裁剪。目标图片的宽度为 Width、高度为 Height。
Objective-C
// 裁剪人脸并宽高指定100缩放为例;[transform setCutWithScrop:100 height:100];
swift
transform.setCutWithScrop(100, height: 100)
旋转
说明:
普通旋转
图片顺时针旋转角度,取值范围0 - 360 ,默认不旋转。
Objective-C
// 以旋转45度为例;[transform setRotateWith:45];
swift
transform.setRotateWith(45)
自适应旋转
根据原图 EXIF 信息将图片自适应旋转回正。
Objective-C
[transform setRotateAutoOrient];
swift
transform.setRotateAutoOrient()
格式转换
说明:
格式转换
目标缩略图的图片格式可为:TPG,JPG,BMP,GIF,PNG,HEIC,WEBP,YJPEG,AVIF 等,其中 YJPEG 为数据万象针对 JPEG 格式进行的优化,本质为 JPG 格式;缺省为原图格式。
Objective-C
// 以转换为 JPG 为例[transform setFormatWith:CIImageTypeJPG];// 指定传参方式:[transform setFormatWith:CIImageTypeTPG options:CILoadTypeUrlFooter];
swift
transform.setFormatWith(CIImageFormat.typeJPG);transform.setFormatWith(CIImageFormat.typeJPG, options: CILoadTypeEnum.urlFooter);
CILoadTypeEnum
// 加载类型 方式一:带 accept 头部 accept:image/ ***CILoadTypeAcceptHeader = 0,// 加载类型 方式二:在 url 后面中拼接 imageMogr2/format/ ***// 如果需要方式二,则使用该值;不传默认为第一种方式CILoadTypeUrlFooter,
说明:
使用 HEIC 格式,需要在 iOS11及以上;不支持 GIF 格式图片转为 HEIC。
当指定为 CILoadTypeAcceptHeader 方式传参时,并且组合了其他的转换则 header 失效,并且在 sdk 内部自动转换为 footer 的方式。
在使用图片格式转换时,如果需要转为 TPG 格式,则需要依赖
CloudInfinite/TPG
模块。在使用图片格式转换时,如果需要转为 AVIF 格式,则需要依赖
CloudInfinite/AVIF
模块。在使用图片格式转换时,如果需要转为WEBP格式,则需要依赖
SDWebImageWebPCoder
库。pod 'CloudInfinite/TPG'
pod 'CloudInfinite/AVIF'
gif 格式优化
只针对原图为 GIF 格式,对 GIF 图片格式进行的优化,降帧降颜色。
FrameNumber=1,则按照默认帧数30处理,如果图片帧数大于该帧数则截取。FrameNumber 取值( 1,100 ],则将图片压缩到指定帧数 (FrameNumber)。
Objective-C
[transform setCgif:50];
swift
transform.setCgif(50)
输出渐进式 JPG 格式
Mode 可为0或1。0表示不开启渐进式;1表示开启渐进式。该参数仅在输出图片格式为 JPG 格式时有效。如果输出非 JPG 图片格式,会忽略该参数,默认值0。
Objective
[transform setInterlace:YES];
swift
transform.setInterlace(true)
质量变换
Objective-C
// 以图片的绝对质量变换以60为例// type 为变换类型,下面具体介绍[transform setQualityWithQuality:60 type:CIQualityChangeAbsolute];
swift
transform.setQualityWithQuality(60, type: CIQualityChangeEnum.absolute)
数据万象提供三种变换类型:绝对变换、相对变换、最低质量变换,其中绝对变换分为强制指定和不指定两种,如下:
// 图片的绝对质量,取值范围0 - 100 ,默认值为原图质量;CIQualityChangeAbsolute = 1,// 图片的绝对质量,取值范围0 - 100 ,强制使用指定值,例如:90!。CIQualityChangeAbsoluteFix,// 图片的相对质量,取值范围0 - 100 ,数值以原图质量为标准。例如原图质量为80,将 rquality 设置为80后,得到处理结果图的图片质量为64(80x80%)CIQualityChangeRelative,// 图片的最低质量,取值范围0 - 100 ,设置结果图的质量参数最小值。// 例如原图质量为85,将 lquality 设置为80后,处理结果图的图片质量为85。// 例如原图质量为60,将 lquality 设置为80后,处理结果图的图片质量会被提升至80。CIQualityChangeLowest,
说明:
仅适用于 JPG、WEBP 格式的图片。
高斯模糊
Objective-C
// 模糊半径20,正态分布的标准差以20为例[transform setBlurRadius:20 sigma:20];
swift
transform.setBlurRadius(20, sigma: 20)
说明:
图片格式为 GIF 时,不支持该操作。
锐化
Objective-C
// 以锐化值100为例[transform setSharpenWith:100];
swift
transform.setSharpenWith(100)
水印
图片水印
Objective-C
//imageUrl 水印图片地址// gravity 文字水印位置,九宫格位置(参考九宫格方位图 ),默认值 SouthEast// dx 水平(横轴)边距,单位为像素,缺省值为0// dy 垂直(纵轴)边距,单位为像素,默认值为0// blogo 水印图适配功能,适用于水印图尺寸过大的场景(如水印墙)。共有两种类型:/// 当 blogo 设置为1时,水印图会被缩放至与原图相似大小后添加/// 当 blogo 设置为2时,水印图会被直接裁剪至与原图相似大小后添加[tran setWaterMarkWithImageUrl:@"http://tpg-1253653367.cos.ap-guangzhou.myqcloud.com/google.jpg" gravity:0 dx:0 dy:0 blogo:0];
swift
transform.setWaterMarkWithImageUrl("", gravity: CloudInfiniteGravity.CIGravityCenter, dx: 0, dy: 0, blogo: CIWaterImageMarkBlogoEnum.none)
文字水印
Objective-C
// text 水印内容// font 水印字体// color 字体颜色,默认值为 #3D3D3D// dissolve 文字透明度,取值1 - 100 ,默认90// gravity 文字水印位置,默认值 SouthEast// dx 水平(横轴)边距,单位为像素,缺省值为0// dy 垂直(纵轴)边距,单位为像素,默认值为0// batch 平铺水印功能,可将文字水印平铺至整张图片。当 batch 设置为1时,开启平铺水印功能// degree 文字水印的旋转角度设置,取值范围为0 - 360,默认0[transform setWaterMarkText:@"腾讯云数据万象" font:nil textColor:nil dissolve:90 gravity:CIGravitySouth dx:100 dy:100 batch:YES degree:45];
swift
transform.setWaterMarkText("腾讯云数据万象", font: nil, textColor: nil, dissolve: 90, gravity: CloudInfiniteGravity.CIGravityCenter, dx: 100, dy: 100, batch: true, degree: 45)
获取图片主题色
Objective-C
[transform setViewBackgroudColorWithImageAveColor:YES]
swift
transform.setViewBackgroudColorWithImageAveColor(true)
去除图片元信息
Objective-C
[transform setImageStrip];
swift
transform.setImageStrip()
组合操作
CITransformation * tran = [CITransformation new];// ***************缩放*************// 缩放百分之50[transform setZoomWithPercent:50 scaleType:ScalePercentTypeALL];// **格式转换 // 转为TPG格式 [tran setFormatWith:CIImageTypeTPG]; // **裁剪 // 裁剪图片 宽高100 左上角左边 30 30 [tran setCutWithWidth:100 height:100 dx:30 dy:30];