API 文档

SDK 文档

诚邀爱技术、爱分享的你,成为文档内容共建者> HOT

简介

数据万象提供两种方式进行图片处理:图片自适应处理 ResponsiveTransformation 和自定义转换处理 CITransformation。

说明:

  • 支持格式:支持处理 JPG、BMP、GIF、PNG、WEBP 格式,并且支持 HEIF 格式的解码和处理操作。
  • 体积限制:处理图片原图大小不超过32MB、宽高不超过30000像素且总像素不超过2.5亿像素,处理结果图宽高设置不超过9999像素;针对动图,原图宽 x 高 x 帧数不超过2.5亿像素。
  • 动图帧数限制:gif 帧数限300帧。

图片自适应处理 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,如下所示。

    implementation 'com.qcloud.cos:tpg:1.3.2'    

在使用图片格式转换时,如果需要转为 AVIF 格式,则需要依赖 avif SDK,如下所示。

    implementation 'com.qcloud.cos:avif:1.0.0'    

使用 TPG 或 AVIF 时,安装时会自动包含 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);

说明:

图片格式为 GIF 时,不支持该操作。

锐化

图片锐化功能,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.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();

目录