tencent cloud

文档反馈

图片处理

最后更新时间:2024-03-13 15:17:11

    简介

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

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持