控制台指南

最佳实践

开发者指南

API 文档

SDK 文档

图片处理

最近更新时间:2021-09-08 16:30:39

简介

腾讯云对象存储(Cloud Object Storage,COS)集成了 数据万象(Cloud Infinite,CI)专业的一体化多媒体解决方案,涵盖以下图片处理功能,详情可见 图片处理概述

服务 功能 说明
基础图片处理服务 缩放 等比缩放、设定目标宽高缩放等多种方式
裁剪 普通裁剪、缩放裁剪、内切圆、人脸智能裁剪
旋转 自适应旋转、普通旋转
格式转换 格式转换、GIF 格式优化、渐进显示
质量变换 针对 JPG 和 WEBP 图片进行质量变换
高斯模糊 对图片进行模糊处理
锐化 对图片进行锐化处理
添加水印 图片水印文字水印
获取图片信息 基本信息EXIF 信息主色调
去除元信息 包括 EXIF 信息
快速缩略模板 快速实现图片格式转换、缩略、剪裁等功能,生成缩略图

SDK API 参考

SDK 所有接口的具体参数与方法说明,请参考 SDK API

上传时使用图片处理

下面示例展示了如何在上传图片时自动实现图片处理。

图片上传完成后,COS 会存储原始图片和已处理过的图片。后续用户可以通过普通的下载请求获取处理结果。

示例代码

List<PicOperationRule> rules = new LinkedList<>();
// 添加一条将图片转化为 png 格式的 rule,处理后的图片在存储桶中的位置标识符为
// examplepngobject
rules.add(new PicOperationRule("examplepngobject", "imageView2/format/png"));
PicOperations picOperations = new PicOperations(true, rules);

PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, cosPath, srcPath);
putObjectRequest.setPicOperations(picOperations);

// 上传成功后,您将会得到 2 张图片,分别是原始图片和处理后图片
COSXMLUploadTask cosxmlUploadTask = transferManager.upload(bucket, cosPath,
        srcPath, uploadId);

说明:

更多完整示例,请前往 GitHub 查看。

盲水印功能

关于盲水印的功能说明请参考 盲水印功能

添加盲水印

功能说明

盲水印支持在上传时添加以及下载时添加。

示例代码一:上传时添加盲水印

List<PicOperationRule> rules = new LinkedList<>();
// 添加一条将盲水印 rule,处理后的图片在存储桶中的位置标识符为
// examplewatermarkobject
rules.add(new PicOperationRule("examplewatermarkobject",
        "watermark/3/type/1/image/aHR0cDovL2V4YW1wbGVzLTEyNTEwMDAw"));
PicOperations picOperations = new PicOperations(true, rules);

PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, cosPath, srcPath);
putObjectRequest.setPicOperations(picOperations);

// 上传成功后,您将会得到 2 张图片,分别是原始图片和处理后图片
COSXMLUploadTask cosxmlUploadTask = transferManager.upload(bucket, cosPath,
        srcPath, uploadId);

说明:

更多完整示例,请前往 GitHub 查看。

示例代码二:下载时添加盲水印

GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, cosPath, savePathDir, savedFileName);
Map<String, String> params = new HashMap<>();
// 添加文字盲水印
params.put("watermark/3/type/3/text/dGVuY2VudCBjbG91ZA==", null);
getObjectRequest.setQueryParameters(params);

COSXMLDownloadTask cosxmlDownloadTask =
        transferManager.download(applicationContext, getObjectRequest);

说明:

更多完整示例,请前往 GitHub 查看。

获取视频截图

String bucket = "examplebucket-1250000000"; //格式:BucketName-APPID
String cosPath = "exampleobject.pdf"; //文档位于存储桶中的位置标识符,即对象键
String localPath = "localdownloadpath"; // 保存在本地文件夹的路径
String fileName = "snapshot.jpg"; // 截图的文件名
float time = 1; // 截图时间,单位 s
GetSnapshotRequest getSnapshotRequest = new GetSnapshotRequest(bucket, cosPath, localPath,
        fileName, time);

cosXmlService.getSnapshotAsync(getSnapshotRequest, new CosXmlResultListener() {
    @Override
    public void onSuccess(CosXmlRequest request, CosXmlResult result) {
        GetSnapshotResult getSnapshotResult = (GetSnapshotResult) result;
    }

    @Override
    public void onFail(CosXmlRequest request, CosXmlClientException clientException, CosXmlServiceException serviceException) {
        if (clientException != null) {
            clientException.printStackTrace();
        } else {
            serviceException.printStackTrace();
        }
    }
});

说明:

更多完整示例,请前往 GitHub 查看。

上传时进行二维码识别

String bucket = "examplebucket-1250000000"; //格式:BucketName-APPID
String cosPath = "exampleobject.pdf"; //文档位于存储桶中的位置标识符,即对象键
String localPath = "localdownloadpath"; // 二维码图片本地路径
final PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, cosPath, localPath);

List<PicOperationRule> rules = new LinkedList<>();
rules.add(new PicOperationRule("/test.png", "QRcode/cover/0"));
PicOperations picOperations = new PicOperations(false, rules);
putObjectRequest.setPicOperations(picOperations);

cosXmlService.putObjectAsync(putObjectRequest, new CosXmlResultListener() {
    @Override
    public void onSuccess(CosXmlRequest request, CosXmlResult result) {
        PutObjectResult putObjectResult = (PutObjectResult) result;
        PicUploadResult picUploadResult = putObjectResult.picUploadResult; // 图片处理结局
    }

    @Override
    public void onFail(CosXmlRequest request, CosXmlClientException clientException, CosXmlServiceException serviceException) {
        if (clientException != null) {
            clientException.printStackTrace();
        } else {
            serviceException.printStackTrace();
        }
    }
});

说明:

更多完整示例,请前往 GitHub 查看。

文档预览

String bucket = "examplebucket-1250000000"; //格式:BucketName-APPID
String cosPath = "exampleobject.pdf"; //文档位于存储桶中的位置标识符,即对象键
String localPath = "localdownloadpath"; // 保存在本地文件夹的路径
int page = 1; // 需转换的文档页码,从 1 开始
PreviewDocumentRequest previewDocumentRequest = new PreviewDocumentRequest(bucket,
        cosPath, localPath, page);

cosXmlService.previewDocumentAsync(previewDocumentRequest, new CosXmlResultListener() {
    @Override
    public void onSuccess(CosXmlRequest request, CosXmlResult result) {
        PreviewDocumentResult previewDocumentResult = (PreviewDocumentResult) result;
    }

    @Override
    public void onFail(CosXmlRequest request, CosXmlClientException clientException, CosXmlServiceException serviceException) {
        if (clientException != null) {
            clientException.printStackTrace();
        } else {
            serviceException.printStackTrace();
        }
    }
});

图片审核

String bucket = "examplebucket-1250000000"; //存储桶,格式:BucketName-APPID
String key = "exampleobject"; //对象键
SensitiveContentRecognitionRequest request = new SensitiveContentRecognitionRequest(bucket, key, "politics");
// CIService 是 CosXmlService,初始化方法和 CosXmlService 一致
ciService.sensitiveContentRecognitionAsync(request, new CosXmlResultListener() {
    @Override
    public void onSuccess(CosXmlRequest request, CosXmlResult result) {
        SensitiveContentRecognitionResult sensitiveContentRecognitionResult = (SensitiveContentRecognitionResult) result;
    }

    @Override
    public void onFail(CosXmlRequest request, CosXmlClientException clientException, CosXmlServiceException serviceException) {
        if (clientException != null) {
            clientException.printStackTrace();
        } else {
            serviceException.printStackTrace();
        }
    }
});

说明:

更多完整示例,请前往 GitHub 查看。

目录