简介
数据万象提供两种方式进行图片处理:图片自适应处理 ResponsiveTransformation 和自定义转换处理 CITransformation。
说明:
支持格式:支持处理 JPG、BMP、GIF、PNG、WEBP 格式,并且支持 HEIF 格式的解码和处理操作。
体积限制:处理图片原图大小不超过32MB、宽高不超过30000像素且总像素不超过2.5亿像素,处理结果图宽高设置不超过9999像素;针对动图,原图宽 x 高 x 帧数不超过2.5亿像素。
动图帧数限制:gif 帧数限300帧。
图片自适应处理包括了格式转换(根据系统版本自动变换格式)和缩放(根据图片控件尺寸以及 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);
cloud-infinite SDK 中的 CITransformation 类封装了数据万象的基础图片处理功能其中包含如下功能:
在使用数据万象基础图片处理功能时首先实例化 CITransformation 类,下面所有操作一致,不再重复说明。
CITransformation transform = new CITransformation();
缩放
按百分比缩放
//指定图片的宽为原图的 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);
裁剪
普通裁剪
// 指定目标图片宽度、高度、相对于图片左上顶点水平向右偏移、相对于图片左上顶点水平向下偏移进行裁剪
transform.cut(100, 300, 30, 30);
内切圆裁剪
radius 是内切圆的半径,取值范围为大于0且小于原图最小边一半的整数。内切圆的圆心为图片的中心。图片格式为 GIF 时,不支持该操作。
// 指定半径100为例
transform.iradius(100);
圆角裁剪
radius 为图片圆角边缘的半径,取值范围为大于0且小于原图最小边一半的整数。圆角与原图边缘相切。图片格式为 GIF 时,不支持该操作。
// 指定圆角半径100为例
transform.rradius(100);
缩放裁剪
//按照指定目标宽度和高度进行缩放裁剪
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);
旋转
普通旋转
图片顺时针旋转角度,取值范围0 - 360 ,默认不旋转。
// 以旋转45度为例;
transform.rotate(45);
自适应旋转
根据原图 EXIF 信息将图片自适应旋转回正。
格式转换
目标缩略图的图片格式可为: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,如下所示。
implementation 'com.tencent.qcloud:tpg:1.3.1'
使用 TPG 时,安装时会自动包含 SO 库,建议在 Module 的 build.gradle 文件中使用 NDK 的“abiFilter”配置,设置支持的 SO 库架构。
defaultConfig {
ndk {
// 设置支持的 SO 库架构
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
}
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);
锐化
图片锐化功能,value 为锐化参数值,取值范围为10 - 300间的整数,推荐使用70。参数值越大,锐化效果越明显。API 文档请参见 锐化接口。 // 以锐化值70为例
transform.sharpen(70);
水印
图片水印
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.png
,https://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 支持多操作组合,并保持有序。
transform
.thumbnailByScale(80)
.iradius(100)
.blur(20,20)
.strip();
本页内容是否解决了您的问题?