图片美化增强AI接口调用手册

在调合合AI平台提供的图片美化增强API接口,API平台链接:https://ai.ccint.com/doc/api/crop_enhance_image, 因为有遇到一些问题,写篇博客记录一下

API文档提供的说明: url中参数app_key为个人中心实例的app_key

请求方式: POST

返回类型: JSON

POST BODY请求字段描述

字段 说明
image_data 必填,图像的base64串
app_secret 必填,个人中心实例的app_secret
scan-m 扫描模式, 建议为 1
detail 锐化程度,建议为-1
contrast 对比度 ,建议为 0
bright 增亮 ,建议为 0
enhanceMode 增强模式,1:增亮,2:增强并锐化,3:黑白,4:灰度

POST BODY,接口要求以Post body方式发送,因为要传base64字符串,请求参数过长有400错误的


    
{
    "image_data": "", // 必填,图像的base64串
    "app_secret": "" // 必填,个人中心实例的app_secret
  "scan-m": 1, //扫描模式, 建议为 1
  "detail": -1, //锐化程度,建议为-1
  "contrast": 0, //对比度 ,建议为 0
  "bright": 0, //增亮 ,建议为 0
  "enhanceMode": 0 //增强模式,1:增亮,2:增强并锐化,3:黑白,4:灰度
}



提示:POST BODY 为 JSON字符串。

返回字段描述

字段 说明
code 返回状态码。200:正常返回; 500:服务器内部错误
message 返回对应code的状态说明
result base64编码的图片信息

正常返回示例

{
    "code": 200,
    "message": "success",
    "result": “图片base64信息”
}

失败返回示例


    {
    "code":30301,
    "message":"额度已用完,请充值后使用"
}

返回码说明


在这里插入图片描述

API文档提供的实例代码:

import sun.misc.BASE64Encoder;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class Main {
    public static void main(String[] args) throws Exception {
        String url = "https://ocr-api.ccint.com/ocr_service?app_key=%s";
        String appKey = "xxxxxx"; // your app_key
      String appSecret = "xxxxxx"; // your app_secret
      url = String.format(url, appKey);
        OutputStreamWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            String imgData = imageToBase64("example.jpg");
            String param="{\"app_secret\":\"%s\",\"image_data\":\"%s\"}";
            param=String.format(param,appSecret,imgData);
            URL realUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod("POST"); // 设置请求方式
            conn.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的
            conn.connect();
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            out.append(param);
            out.flush();
            out.close();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!" + e);
            e.printStackTrace();
        }
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        System.out.println(result);
    }
    public static String imageToBase64(String path)
    {
        String imgFile = path;
        InputStream in = null;
        byte[] data = null;
        try
        {
            in = new FileInputStream(imgFile);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data);
    }
}

注意要点:

  • 写文件流时记得outputstream要flush,才能拿到数据
  • 接口返回的json格式的数据,同时带有base64的字符串,所以需要json解析一下,然后调工具类,将base64字符串转换为文件,保存在本地,下面给出调用的代码,仅供参考
/**
     * 图片切边增强接口调用
     * @author nicky.ma
     * @date   2019年5月20日下午3:44:27
     * @param scanM   扫描模式, 建议为 1
     * @param bright    增亮 ,建议为 0
     * @param contrast   对比度 ,建议为 0
     * @param detail     锐化程度,建议为-1
     * @param sourcePath  
     * @param destPath
     * detail=0&contrast=0&bright=50  增到最亮
     * @return
     */
    public static void ccintCropEnhanceHttpService(final int scanM,final int bright,final int contrast,
            final int detail,final int enhanceMode,String sourcePath,String destPath) throws Exception{
        logger.info("sourcePath:{}"+sourcePath);
        logger.info("destPath:{}"+destPath);
        
        //base64转换
        final String imgData = imageToBase64(sourcePath);
        
        Map<String,Object> paramsMap=new HashMap<String,Object>(){
        private static final long serialVersionUID=1L;
        {
                put("image_data",imgData);
                put("app_secret",CCINT_APP_SECRET);
                put("scan-m",scanM);
                put("detail",detail);
                put("contrast",contrast);
                put("bright",bright);
                put("enhanceMode",enhanceMode);
        }};
        String param = JSON.toJSONString(paramsMap);
        
//      String param="{\"app_secret\":\"%s\",\"image_data\":\"%s\",\"scan-m\":\"%s\",\"detail\":\"%s\",\"contrast\":\"%s\",\"bright\":\"%s\",\"enhanceMode\":\"%s\"}";
//      param=String.format(param,CCINT_APP_SECRET,imgData,scanM,detail,contrast,bright,enhanceMode);
        
        String url = CCINT_CROP_ENHANCE_URL+"?app_key="+CCINT_APP_KEY;
        OutputStreamWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
            conn.setConnectTimeout(20*1000);
            conn.setReadTimeout(20*1000);
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod("POST"); // 设置请求方式
            //conn.setRequestProperty("transfer-encoding","chunked");
            conn.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的
            conn.connect();
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            out.append(param);
            //要记得flush,才能拿到数据
            out.flush();
            out.close();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            logger.info("返回Result:{}"+result);
            int code=conn.getResponseCode();
            if(code==200){
                JSONObject obj = JSON.parseObject(result);
//              copyFileByInputStream(conn.getInputStream(),destPath);
                FileBase64Util.decoderBase64File(obj.getString("result"), destPath);
                logger.info("图片增强后文件大小:{}"+new File(destPath).length()/1024+"KB");
            }
            conn.disconnect();

        } catch (Exception e) {
            logger.error("AI平台接口调用异常:{}"+e);
            e.printStackTrace();
        }finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    
    private static String imageToBase64(String path)
    {
        String imgFile = path;
        InputStream in = null;
        byte[] data = null;
        try
        {
            in = new FileInputStream(imgFile);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data);
    }
    

base64字符串和文件转换工具类:


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.commons.codec.binary.Base64;

public class FileBase64Util{

     /**
      * 将文件转成base64 字符串
      * @param path文件路径
      * @return   
      * @throws Exception
      */
     public static String encodeBase64File(String path) throws Exception {
       File file = new File(path);
       FileInputStream inputFile = new FileInputStream(file);
       byte[] buffer = new byte[(int) file.length()];
       inputFile.read(buffer);
       inputFile.close();
       return Base64.encodeBase64String(buffer);
     }

     /**
      * 将base64字符解码保存文件
      * @param base64String
      * @param targetPath
      * @throws Exception
      */

     public static void decoderBase64File(String base64String, String targetPath)throws Exception {
         byte[] buffer=Base64.decodeBase64(base64String);
         FileOutputStream out = new FileOutputStream(targetPath);
         out.write(buffer);
         out.close();
     }

     /**
      * 将base64字符保存文本文件
      * @param base64Code
      * @param targetPath
      * @throws Exception
      */

     public static void toFile(String base64Code, String targetPath)throws Exception {
        byte[] buffer=base64Code.getBytes();
        FileOutputStream out = new FileOutputStream(targetPath);
        out.write(buffer);
        out.close();
      }

     public static void main(String[] args){
         try{
            String base64String=${base64字符串};
            decoderBase64File(encodeBase64File("d://2018-11-27 14_34_28_reject_dq.pdf"),"D:/2.pdf");
         }catch(Exception e){
            e.printStackTrace();
         }
     }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容