百度-图片清晰度增强API在java中使用教程

最近百度推出了一款“百度AI图片助手”的工具很是好用,向我们常用的画质修复功能、去除水印功能,AI扩图功能都非常好用,对于我们处理图片很有帮助。但是比较鸡肋的是只能在百度搜索图片中使用,并没有独立出来相应的网站或者软件,但是百度官方提供相应的API接口可以调用。官网

1.去百度智能云官网上开通购买对应的功能,不过百度提供1000次的免费使用机会,点击下图的“免费尝鲜”可以获取。

2.点击左侧的应用列表->创建应用->选择对应的接口功能->填写其余信息后立即创建

3.创建完成后在应用列表中你会得到对应的AppID、API Key、Secret Key,接下来需要用到

4.点击左侧的技术文档->文档中心中的API文档->图像清晰度增强。

5.如果你能够看懂官方文档就按照官方文档的步骤,如果不能则继续往下看。

6.创建spring项目,在pom.xml中导入相应的坐标

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.baidu.aip</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.16.17</version>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>
        <!--okhttp3 依赖-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.3</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>
        <dependency>
            <groupId> org.apache.cassandra</groupId>
            <artifactId>cassandra-all</artifactId>
            <version>0.8.1</version>

            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>

        </dependency>
    </dependencies>

 7.项目代码

package com.qianjin.test;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.qianjin.util.Base64Util;
import com.qianjin.util.FileUtil;
import com.qianjin.util.HttpUtil;
import okhttp3.*;

import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Base64;

/**
 * @Description 图片清晰度增强
 * @Author qianjin
 * @Date 2024/4/22 19:49
 */
public class Image_definition_enhance {
    static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
    public static void main(String[] args) throws IOException {
        /*String token = getToken2();
        System.out.println(token);*/
        //result为json数据{ "log_id":739539874, "image":base64str }
        String result = image_definition_enhance();
        JSONObject jsonObj = JSON.parseObject(result);
        String image = jsonObj.getString("image");
        String path = "E:\\test_file\\result2.png";
        saveImage(image, path);
    }

    public static String image_definition_enhance() {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/image-process/v1/image_definition_enhance";
        try {
            // 本地文件路径
            String filePath = "E:\\test_file\\1.png";
            byte[] imgData = FileUtil.readFileByBytes(filePath);
            String imgStr = Base64Util.encode(imgData);
            String imgParam = URLEncoder.encode(imgStr, "UTF-8");

            String param = "image=" + imgParam;

            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String accessToken = "你自己的token";

            String result = HttpUtil.post(url, accessToken, param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getToken2() throws IOException {
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "");
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/oauth/2.0/token?client_id=&client_secret=&grant_type=client_credentials")
                .method("POST", body)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();
        Response response = HTTP_CLIENT.newCall(request).execute();
        String token = response.body().string();
        return token;
    }

    public static void saveImage(String base64String, String outputPath) throws IOException {
        // Base64解码
        byte[] decodedBytes = Base64.getDecoder().decode(base64String);
        // 创建输出流
        FileOutputStream fos = new FileOutputStream(outputPath);
        // 将解码后的字节写入文件
        fos.write(decodedBytes);
        // 关闭输出流
        fos.close();
        System.out.println("图片已成功保存至 " + outputPath);
    }
}

代码中所使用到的工具类可以从下面网址中下载

https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3

8.功能分析

        首先你在调用image_definition_enhance()进行图片处理之前需要先获取你自己的token,然后将该方法中的String accessToken = "你自己的token";这句代码替换成你所生成的token值。以下是生成token方法。

        首先把main函数中的/*String token = getToken2();  System.out.println(token);*/这两行注释打开,注释下面的代码。在getToken2方法中需要改造request请求对应的url。比如说你的API Key是123,Secret Key是456,那么你对应的url应该是

url("https://aip.baidubce.com/oauth/2.0/token?client_id=123&client_secret=456&grant_type=client_credentials")

改造完之后运行程序,找到控制台输出的token,如下图“access_token”就是对应的token,因为token的过期时间是30天,所以没必要每次都获取,获取之后复制填入image_definition_enhance()方法中的String accessToken = "你自己的token";最后就可以运行main函数后面的代码进行图片处理了。

        在main函数中的代码,调用image_definition_enhance()方法返回的是json格式的数据,包含“log_id”字段和“image”字段,其中经过处理的图片数据是“image”字段的内容,但是是处理后的结果是图片的Base64编码数据,需要进一步解码才能得到对应图像。这里采用的方法是,使用fastjson中的parseObject()方法将result转化为对象,然后就能获取对应“image”中的内容,再使用saveImage()方法保存解码后的图像。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值