有奖捉虫:云通信与企业服务文档专题,速来> HOT

简介

数据万象提供两种方式进行图片处理:图片自适应处理 ResponsiveTransformation 和自定义转换处理 CITransformation。
说明:
支持格式:支持处理 JPG、BMP、GIF、PNG、WEBP 格式,并且支持 HEIF 格式的解码和处理操作。
体积限制:处理图片原图大小不超过32MB、宽高不超过30000像素且总像素不超过2.5亿像素,处理结果图宽高设置不超过9999像素;针对动图,原图宽 x 高 x 帧数不超过2.5亿像素。
动图帧数限制:gif 帧数限300帧。

相关资源

SDK 接口与参数文档请参见 SDK API

图片自适应处理 ResponsiveTransformation

图片自适应处理包括了格式转换(根据系统版本自动变换格式)和缩放(根据图片控件尺寸以及 ScaleType 进行缩放),相关说明如下。
1. 自适应加载 ResponsiveTransformation。
2. 根据当前 imageView 控件尺寸和 ScaleType 自动调整图片大小。
3. 根据系统版本自动调整最优图片格式,Android 4.3以下加载原格式,Android 4.3(包含4.3)到 Android 10.0(不包含10.0)加载 WEBP 格式,Android 10.0及以上加载 HEIC 格式。
ResponsiveTransformation transformation = new ResponsiveTransformation(imageview);

自定义转换处理 CITransformation

cloud-infinite SDK 中的 CITransformation 类封装了数据万象的基础图片处理功能其中包含如下功能:

缩放
裁剪
旋转
锐化
水印

在使用数据万象基础图片处理功能时首先实例化 CITransformation 类,下面所有操作一致,不再重复说明。
CITransformation transform = new CITransformation();

缩放

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

按百分比缩放

//指定图片的宽为原图的 50%,高度不变
transform.thumbnailByWidthScale(50);
//指定图片的高为原图的 50%,宽度不变
transform.thumbnailByHeightScale(50);
//指定图片的宽高为原图的 50%
transform.thumbnailByScale(50);

指定宽高缩放

//指定目标图片宽度为50,高度等比压缩
transform.thumbnailByWidth(50);
//指定目标图片高度为50,宽度等比压缩
transform.thumbnailByHeight(50);
//限定缩略图的宽度和高度的最小值分别为50和50,进行等比缩放
transform.thumbnailByMinWH(50, 50);
//限定缩略图的宽度和高度的最大值分别为50和50,进行等比缩放
transform.thumbnailByMaxWH(50, 50);
//忽略原图宽高比例,指定图片宽度为50,高度为50 ,强行缩放图片,可能导致目标图片变形
transform.thumbnailByWH(50, 50);

等比缩放

限制像素缩放,缩放后的图像,总像素数量不超过指定数量。
//等比缩放图片,缩放后的图像,总像素数量不超过1000
transform.thumbnailByPixel(1000);

裁剪

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

普通裁剪

// 指定目标图片宽度、高度、相对于图片左上顶点水平向右偏移、相对于图片左上顶点水平向下偏移进行裁剪
transform.cut(100, 300, 30, 30);

内切圆裁剪

radius 是内切圆的半径,取值范围为大于0且小于原图最小边一半的整数。内切圆的圆心为图片的中心。图片格式为 GIF 时,不支持该操作。
// 指定半径100为例
transform.iradius(100);

圆角裁剪

radius 为图片圆角边缘的半径,取值范围为大于0且小于原图最小边一半的整数。圆角与原图边缘相切。图片格式为 GIF 时,不支持该操作。
// 指定圆角半径100为例
transform.rradius(100);

缩放裁剪

说明:
方位图说明,请参见 gravity 介绍
//按照指定目标宽度和高度进行缩放裁剪
transform.cropByWH(100, 100);
//按照指定目标宽度和高度进行缩放裁剪,指定操作的起点位置
transform.cropByWH(100, 100, CIGravity.CENTER);
//按照指定目标宽度进行缩放裁剪
transform.cropByWidth(100);
//按照指定目标宽度进行缩放裁剪,指定操作的起点位置
transform.cropByWidth(100, CIGravity.CENTER);
//按照指定目标高度进行缩放裁剪
transform.cropByHeight(100);
//按照指定目标高度进行缩放裁剪,指定操作的起点位置
transform.cropByHeight(100, CIGravity.CENTER);

人脸智能裁剪

基于图片中的人脸位置进行缩放裁剪。目标图片的宽度为 Width、高度为 Height。
// 裁剪人脸并宽高指定100缩放为例;
transform.scrop(100, 100);

旋转

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

普通旋转

图片顺时针旋转角度,取值范围0 - 360 ,默认不旋转。
// 以旋转45度为例;
transform.rotate(45);

自适应旋转

根据原图 EXIF 信息将图片自适应旋转回正。
transform.rotate();

格式转换

说明:
API 文档请参见 格式转换接口
目标缩略图的图片格式可为:TPG,JPG,BMP,GIF,PNG,HEIC,YJPEG 等,其中 YJPEG 为数据万象针对 JPEG 格式进行的优化,本质为 JPG 格式;缺省为原图格式。
// 以转换为 JPEG 为例
transform.format(CIImageFormat.JPEG, CIImageLoadOptions.LoadTypeUrlFooter);
CIImageLoadOptions
// 加载类型一 带 accept 头部 accept:image/xxx
LoadTypeAcceptHeader,

// 加载类型二 在URL后面拼接 imageMogr2/format/xxx
LoadTypeUrlFooter,
说明:
使用 WEBP 格式,需要在 Android 4.3及以上。
使用 HEIC 格式,需要在 Android 10及以上。
不支持将 GIF 格式图片转换为 HEIF 格式。
当指定为 LoadTypeAcceptHeader 方式传参时,并且组合了其他的转换则 header 失效,并且在 sdk 内部自动转换为 footer 的方式。
在使用图片格式转换时,如果需要转为 TPG 格式,可能需要依赖 tpg SDK。 TPG 解码器基础使用,请参见 TPG 解码器

在使用图片格式转换时,如果需要转为 AVIF 格式,可能需要依赖 avif SDK。 AVIF 解码器基础使用,请参见 AVIF 解码器


GIF 格式优化

只针对原图为 GIF 格式,对 GIF 图片格式进行的优化,降帧降颜色。 FrameNumber=1,则按照默认帧数30处理,如果图片帧数大于该帧数则截取。 FrameNumber 取值( 1,100 ],则将图片压缩到指定帧数 (FrameNumber)。
transform.gifOptimization(50);

输出渐进式 JPG 格式

该操作仅在输出图片格式为 JPG 格式时有效。如果输出非 JPG 图片格式,会忽略该操作。
transform.jpegInterlaceMode(true);

质量变换

数据万象提供三种变换类型:绝对变换、相对变换、最低质量变换,可调节图片质量。API 文档请参见 质量变换接口
//设置图片的绝对质量,取值范围0 - 100 ,默认值为原图质量;取原图质量和指定质量的最小值
transform.quality(90);
// 图片的最低质量,取值范围0 - 100 ,设置结果图的质量参数最小值。
// 例如原图质量为85,将 lquality 设置为80后,处理结果图的图片质量为85。
// 例如原图质量为60,将 lquality 设置为80后,处理结果图的图片质量会被提升至80
transform.lowestQuality(90);
//设置图片的相对质量,取值范围0 - 100 ,数值以原图质量为标准。例如原图质量为80,将 rquality 设置为80后,得到处理结果图的图片质量为64(80x80%)
transform.relativelyQuality(80);
说明:
仅适用于 JPG 和 WEBP 格式的图片。

高斯模糊

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

锐化

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

水印

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

图片水印

WatermarkImageTransform watermarkImageTransform = new WatermarkImageTransform
//水印图片地址
.Builder(imageurl)
//设置水印九宫格位置
.setGravity(CIGravity.CENTER)
//设置水印图适配功能,适用于水印图尺寸过大的场景(如水印墙)
.setBlogo(1)
//设置水平(横轴)边距
.setDistanceX(10)
//设置垂直(纵轴)边距
.setDistanceY(10)
.builder();
transform.watermarkImage(watermarkImageTransform);
说明:
指定的水印图片必须同时满足如下3个条件:
1. 水印图片与源图片必须位于同一个存储桶下。
2. URL 需使用 COS 域名(不能使用 CDN 加速域名,例如 examplebucket-1250000000.file.myqcloud.com/shuiyin_2.png 不可用 ,且需保证水印图可访问。如果水印图读取权限为私有,则需要携带有效签名)。
3. URL 必须以http://开始,不能省略 HTTP 头,也不能填 HTTPS 头,例如 examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/shuiyin_2.pnghttps://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/shuiyin_2.png 为非法的水印 URL。

文字水印

WatermarkTextTransform watermarkImageTransform = new WatermarkTextTransform
//水印内容
.Builder("水印")
//设置水印九宫格位置
.setGravity(CIGravity.CENTER)
//设置水印字体
.setFont("tahoma.ttf")
//设置水印文字字体大小
.setFontSize(13)
//设置水印字体颜色
.setFill("#FF0000")
//设置水印文字透明度
.setDissolve(80)
//设置水平(横轴)边距
.setDistanceX(10)
//设置垂直(纵轴)边距
.setDistanceY(10)
//打开平铺水印功能,可将文字水印平铺至整张图片
.openBatch()
//旋转水印
.rotate(45)
.builder();
transform.watermarkText(watermarkImageTransform);

去除图片元信息

腾讯云数据万象通过 imageMogr2 接口可去除图片元信息,包括 EXIF 信息。API 文档请参见 去除图片元信息接口
transform.strip();

组合操作

Transform 支持多操作组合,并保持有序。
transform
.thumbnailByScale(80)
.iradius(100)
.blur(20,20)
.strip();