开发者社区 > 云存储 > 对象存储OSS > 正文

java上传图片后如何获取图片主色调

问题描述

获取图片主色调中只提到使用浏览器访问http://image-demo.img.aliyuncs.com/example.jpg?x-oss-process=image/average-hue,可以得到图片的主色调,那我是用java应该如何获取啊,而且这个东西能不能做成put之后返回的啊,还是说,我没有看见。

期望结果

...

已尝试的方法

我用了getObject方法,但是好像获取的是个OSSObject,这个里面就直接是图片的流了,而且SDK中图片处理只是提到,加水印,旋转,然后存到本地,处理参数中这些操作和获取主色调(average-hue),也就是说其实加水印和旋转应该是可以用同样的操作而出来的,但是获取主色调只是一个信息呀,其他的是下载了一个图片

展开
收起
1560312618556082 2022-09-06 18:57:31 177 0
1 条回答
写回答
取消 提交回答
  • 您好,您可以使用Java SDK的getObject方法获取OSS Object并进行图片处理,然后读取经过图片处理后的Object的内容。

    代码示例如下:

    import com.aliyun.oss.*;import com.aliyun.oss.model.GetObjectRequest;import com.aliyun.oss.model.OSSObject;import java.io.*;public class Demo {    public static void main(String[] args) throws Throwable {        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。        String accessKeyId = "LTAI5tMH7***";        String accessKeySecret = "sRaQg0i3SH9***";        // 填写Bucket名称,例如examplebucket。        String bucketName = "examplebucket";        // 填写Object完整路径。Object完整路径中不能包含Bucket名称。        String objectName = "demo.png";        // 创建OSSClient实例。        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        try {            // 将图片缩放为固定宽高100 px后,再旋转90°。            String style = "image/average-hue";            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);            request.setProcess(style);            // 读取处理后的文件内容。            System.out.println("Object content:");            OSSObject ossObject = ossClient.getObject(request);            BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));            while (true) {                String line = reader.readLine();                if (line == null) break;                System.out.println("\n" + line);            }            // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。            reader.close();            // ossObject对象使用完毕后必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。            ossObject.close();        } catch (OSSException oe) {            System.out.println("Caught an OSSException, which means your request made it to OSS, "                    + "but was rejected with an error response for some reason.");            System.out.println("Error Message:" + oe.getErrorMessage());            System.out.println("Error Code:" + oe.getErrorCode());            System.out.println("Request ID:" + oe.getRequestId());            System.out.println("Host ID:" + oe.getHostId());        } catch (ClientException ce) {            System.out.println("Caught an ClientException, which means the client encountered "                    + "a serious internal problem while trying to communicate with OSS, "                    + "such as not being able to access the network.");            System.out.println("Error Message:" + ce.getMessage());        } finally {            if (ossClient != null) {                ossClient.shutdown();            }        }    }}

    返回示例如下:

    Object content:{"RGB": "0x5c783b"}Process finished with exit code 0

    更多信息,请参见文档:https://help.aliyun.com/document_detail/44686.html#section-b41-0e5-nye

    2022-09-07 15:43:07
    赞同 展开评论 打赏

对象存储 OSS 是一款安全、稳定、高性价比、高性能的云存储服务,可以帮助各行业的客户在互联网应用、大数据分析、机器学习、数据归档等各种使用场景存储任意数量的数据,以及进行任意位置的访问,同时通过丰富的数据处理能力更便捷地使用数据。

热门讨论

热门文章

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载