有奖征文:轻量对象存储LighthouseCOS用户实践> HOT

简介

数据万象提供两种方式进行图片处理:图片自适应处理 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();

缩放

说明:
API 文档请参见 缩放功能接口

按百分比缩放

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)

裁剪

说明:
API 文档请参见 裁剪功能接口

普通裁剪

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)

缩放裁剪

说明:
方位图说明,请参见 gravity 介绍
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)

旋转

说明:
API 文档请参见 旋转功能接口

普通旋转

图片顺时针旋转角度,取值范围0 - 360 ,默认不旋转。
Objective-C
// 以旋转45度为例;
[transform setRotateWith:45];
swift
transform.setRotateWith(45)

自适应旋转

根据原图 EXIF 信息将图片自适应旋转回正。 Objective-C
[transform setRotateAutoOrient];
swift
transform.setRotateAutoOrient()

格式转换

说明:
API 文档请参见 格式转换接口

格式转换

目标缩略图的图片格式可为: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)

质量变换

调节图片质量,API 文档请参见 质量变换接口
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 格式的图片。

高斯模糊

高斯模糊功能,模糊半径,取值范围为1 - 50;正态分布的标准差,必须大于0。API 文档请参见 高斯模糊接口
Objective-C
// 模糊半径20,正态分布的标准差以20为例
[transform setBlurRadius:20 sigma:20];
swift
transform.setBlurRadius(20, sigma: 20)
说明:
图片格式为 GIF 时,不支持该操作。

锐化

图片锐化功能,value 为锐化参数值,取值范围为10 - 300间的整数,推荐使用70。参数值越大,锐化效果越明显。API 文档请参见 锐化接口
Objective-C
// 以锐化值100为例
[transform setSharpenWith:100];
swift
transform.setSharpenWith(100)

水印

说明:
API 文档请参见 图片水印接口文字水印接口
方位图说明,请参见 gravity

图片水印

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)

获取图片主题色

腾讯云数据万象通过 imageAve 接口获取图片主色调信息。API 文档请参见 获取主题色接口
Objective-C
[transform setViewBackgroudColorWithImageAveColor:YES]
swift
transform.setViewBackgroudColorWithImageAveColor(true)

去除图片元信息

腾讯云数据万象通过 imageMogr2 接口可去除图片元信息,包括 exif 信息。API 文档请参见 去除图片元信息接口
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];