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

网友投稿 592 2022-05-30

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

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

请求方式: POST

返回类型: JSON

POST BODY请求字段描述

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, "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

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

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 paramsMap=new HashMap(){ 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

AI Java

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
下一篇:记住:永远不要在 MySQL 中使用 UTF-8
相关文章