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

举报
yd_273762914 发表于 2020/12/03 00:12:17 2020/12/03
【摘要】 在调合合AI平台提供的图片美化增强API接口,API平台链接:https://ai.ccint.com/doc/api/crop_enhance_image, 因为有遇到一些问题,写篇博客记录一下 API文档提供的说明: url中参数app_key为个人中心实例的app_key 请求方式: POST 返回类型: JSON POST BODY请求字段描述 字段说...

在调合合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:灰度
} 
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

提示:POST BODY 为 JSON字符串。

返回字段描述

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

正常返回示例

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

失败返回示例

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


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

返回码说明
在这里插入图片描述
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); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

注意要点:

  • 写文件流时记得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); } 
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113

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(); }
	 }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。

原文链接:smilenicky.blog.csdn.net/article/details/90543626

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。