tencent cloud

文档反馈

图片处理

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

    简介

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

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

    技术支持

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

    7x24 电话支持