简介
数据万象提供两种方式进行图片处理:图片自适应处理 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();
缩放
说明:
按百分比缩放
//指定图片的宽为原图的 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);
等比缩放
限制像素缩放,缩放后的图像,总像素数量不超过指定数量。
//等比缩放图片,缩放后的图像,总像素数量不超过1000transform.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 信息将图片自适应旋转回正。
transform.rotate();
格式转换
说明:
目标缩略图的图片格式可为:TPG,JPG,BMP,GIF,PNG,HEIC,YJPEG 等,其中 YJPEG 为数据万象针对 JPEG 格式进行的优化,本质为 JPG 格式;缺省为原图格式。
// 以转换为 JPEG 为例transform.format(CIImageFormat.JPEG, CIImageLoadOptions.LoadTypeUrlFooter);
CIImageLoadOptions
// 加载类型一 带 accept 头部 accept:image/xxxLoadTypeAcceptHeader,// 加载类型二 在URL后面拼接 imageMogr2/format/xxxLoadTypeUrlFooter,
说明:
使用 WEBP 格式,需要在 Android 4.3及以上。
使用 HEIC 格式,需要在 Android 10及以上。
不支持将 GIF 格式图片转换为 HEIF 格式。
当指定为 LoadTypeAcceptHeader 方式传参时,并且组合了其他的转换则 header 失效,并且在 sdk 内部自动转换为 footer 的方式。
GIF 格式优化
只针对原图为 GIF 格式,对 GIF 图片格式进行的优化,降帧降颜色。
FrameNumber=1,则按照默认帧数30处理,如果图片帧数大于该帧数则截取。
FrameNumber 取值( 1,100 ],则将图片压缩到指定帧数 (FrameNumber)。
transform.gifOptimization(50);
输出渐进式 JPG 格式
该操作仅在输出图片格式为 JPG 格式时有效。如果输出非 JPG 图片格式,会忽略该操作。
transform.jpegInterlaceMode(true);
质量变换
//设置图片的绝对质量,取值范围0 - 100 ,默认值为原图质量;取原图质量和指定质量的最小值transform.quality(90);// 图片的最低质量,取值范围0 - 100 ,设置结果图的质量参数最小值。// 例如原图质量为85,将 lquality 设置为80后,处理结果图的图片质量为85。// 例如原图质量为60,将 lquality 设置为80后,处理结果图的图片质量会被提升至80transform.lowestQuality(90);//设置图片的相对质量,取值范围0 - 100 ,数值以原图质量为标准。例如原图质量为80,将 rquality 设置为80后,得到处理结果图的图片质量为64(80x80%)transform.relativelyQuality(80);
说明:
仅适用于 JPG 和 WEBP 格式的图片。
高斯模糊
// 模糊半径20,正态分布的标准差20为例transform.blur(20, 20);
说明:
图片格式为 GIF 时,不支持该操作。
锐化
// 以锐化值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);
去除图片元信息
transform.strip();
组合操作
Transform 支持多操作组合,并保持有序。
transform.thumbnailByScale(80).iradius(100).blur(20,20).strip();