【图像处理-图像无损放大】JavaAPI示例代码
756665228 发布于2018-09-18 11:04 浏览:2046 回复:1
1
收藏
  • 属于内测接口,需要申请哦。
  • 接口说明:http://ai.baidu.com/docs#/ImageProcessing-API/815af37c

 

  • 需要用到的第三方jar


    com.alibaba
    fastjson
    1.2.47

 

可以在尽量保持图像质量的条件下,将图像在长宽方向各放大两倍

-----------------------------------------------------下面开始代码----------------------------------------------------

  • Java示例代码
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

import sun.misc.BASE64Decoder;

import com.alibaba.fastjson.JSON;
import com.xs.pojo.imageprocess.ImageProcessGeneralBean;
import com.xs.util.baidu.Base64Util;
import com.xs.util.baidu.FileUtil;
import com.xs.util.baidu.HttpUtil;
/**
 * 图像无损放大
 * @author 小帅丶
 *
 */
public class PhotoZoomProAPISample {
	//图像无损放大接口URL
	public static String IMAGE_QUALITY_ENHANCE_URL="https://aip.baidubce.com/rest/2.0/image-classify/v1/image_quality_enhance";
	public static void main(String[] args) throws Exception {
		String accessToken = "自己应用获取的AccessToken";
		String imagefilePath = "G:/testimg/xcx.jpg";
		ImageProcessGeneralBean bean = getContrastEnhanceBean(imagefilePath, accessToken);
		GenerateImage(bean.getImage(), "G:/xcx.jpg");
	}
	/**
	 * 图像无损放大Demo
	 * @param imagePath 图片本地路径
	 * @param accessToken 应用token
	 * @return 字符串
	 * @throws Exception
	 */
	public static String getPhotoZoomProResult(String imagePath,String accessToken) throws Exception{
		byte[] imgData = FileUtil.readFileByBytes(imagePath);
        String imgStr = Base64Util.encode(imgData);
		String param = "image=" + URLEncoder.encode(imgStr,"UTF-8");
        // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
		String result = HttpUtil.post(IMAGE_QUALITY_ENHANCE_URL, accessToken, param);
        System.out.println(result);
        return result;
	}
	/**
	 * 图像无损放大Demo
	 * @param imagePath 图片本地路径
	 * @param accessToken 应用token
	 * @return ImageProcessGeneralBean
	 * @throws Exception
	 */
	public static ImageProcessGeneralBean getContrastEnhanceBean(String imagePath,String accessToken) throws Exception{
		String result = getPhotoZoomProResult(imagePath,accessToken);
		ImageProcessGeneralBean imageProcessGeneralBean = JSON.parseObject(result,ImageProcessGeneralBean.class);
		return imageProcessGeneralBean;
	}
	 /**
     * base64字符串转化成图片  
     * @param imgStr base64
     * @param imgFilePath 保存的图片路径
     * @return
     */
	public static boolean GenerateImage(String imgStr, String imgFilePath) { // 对字节数组字符串进行Base64解码并生成图片
		if (imgStr == null) // 图像数据为空
			return false;
		BASE64Decoder decoder = new BASE64Decoder();
		try {
			// Base64解码
			byte[] b = decoder.decodeBuffer(imgStr);
			for (int i = 0; i < b.length; ++i) {
				if (b[i] < 0) {// 调整异常数据
					b[i] += 256;
				}
			}
			// 生成jpeg图片
			OutputStream out = new FileOutputStream(imgFilePath);// 新生成的图片
			out.write(b);
			out.flush();
			out.close();
			return true;
		} catch (Exception e) {
			System.out.println("出错了" + e.getMessage());
			return false;
		}
	}
}

 

  • JavaBean对象ImageProcessGeneralBean
/**
 * 图像处理接口返回的通用bean对象
 * @author 小帅丶
 */
public class ImageProcessGeneralBean {
	private long log_id;//唯一的log id,用于问题定位
	private String image;//base64编码图片
	public long getLog_id() {
		return log_id;
	}
	public void setLog_id(long log_id) {
		this.log_id = log_id;
	}
	public String getImage() {
		return image;
	}
	public void setImage(String image) {
		this.image = image;
	}
}
  • 看一下原图和处理后的图片的对比

可以看出图片进行了无损2倍放大。

注意:长宽乘积不超过800px*800px

收藏
点赞
1
个赞
共1条回复 最后由15029288076回复于2018-09-23 09:13
1
#215029288076回复于2018-09-23 09:13:46

已存,好

0
TOP
切换版块