package org.springblade.modules.fwbbjq.util;

import sun.misc.BASE64Encoder;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Base64Util {

	/**
	 * 图片URL转Base64编码
	 * @param imgUrl 图片URL
	 * @return Base64编码
	 */
	public  String imageUrlToBase64(String imgUrl) {
		URL url = null;
		InputStream is = null;
		ByteArrayOutputStream outStream = null;
		HttpURLConnection httpUrl = null;

		try {
			url = new URL(imgUrl);
			httpUrl = (HttpURLConnection) url.openConnection();
			httpUrl.connect();
			httpUrl.getInputStream();

			is = httpUrl.getInputStream();
			outStream = new ByteArrayOutputStream();

			//创建一个Buffer字符串
			byte[] buffer = new byte[1024];
			//每次读取的字符串长度，如果为-1，代表全部读取完毕
			int len = 0;
			//使用输入流从buffer里把数据读取出来
			while( (len = is.read(buffer)) != -1 ){
				//用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
				outStream.write(buffer, 0, len);
			}

			// 对字节数组Base64编码
			return encode(outStream.toByteArray());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(is != null) {
					is.close();
				}
				if(outStream != null) {
					outStream.close();
				}
				if(httpUrl != null) {
					httpUrl.disconnect();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		return null;
	}

	/**
	 * 图片转字符串
	 * @param image 图片Buffer
	 * @return Base64编码
	 */
	public  String encode(byte[] image){
		BASE64Encoder decoder = new BASE64Encoder();
		return replaceEnter(decoder.encode(image));
	}

	/**
	 * 字符替换
	 * @param str 字符串
	 * @return 替换后的字符串
	 */
	public  String replaceEnter(String str){
		String reg ="[\n-\r]";
		Pattern p = Pattern.compile(reg);
		Matcher m = p.matcher(str);
		return m.replaceAll("");
	}

	public  List<String> getImgSrc(String htmlStr) {

		if( htmlStr == null ){

			return null;
		}

		String img = "";
		Pattern p_image;
		Matcher m_image;
		List<String> pics = new ArrayList<String>();

		String regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>";
		p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
		m_image = p_image.matcher(htmlStr);
		while (m_image.find()) {
			img = img + "," + m_image.group();
			// Matcher m =
			// Pattern.compile("src=\"?(.*?)(\"|>|\\s+)").matcher(img); //匹配src
			Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);

			while (m.find()) {
				pics.add(m.group(1));
			}
		}
		return pics;
	}

//
//	public static void main(String[] args) {
//		System.out.println(Base64Util.imageUrlToBase64("http://140.143.235.69:9000/bladex/upload/20221206/7f8856dde692a454b20099cb8b51cee6.png"));
//	}

}
