투케이2K

53. (spring/스프링) BufferedImage 사용해 http 이미지 주소 링크 사진 정보 data url 로 변경 실시 본문

Spring

53. (spring/스프링) BufferedImage 사용해 http 이미지 주소 링크 사진 정보 data url 로 변경 실시

투케이2K 2022. 6. 28. 12:51

[개발 환경 설정]

개발 툴 : inteli j

개발 언어 : spring

 

[소스 코드]

    @GetMapping("/userImageData")
    public String userImageData(@RequestParam Map<String, String> param){
        System.out.println("\n");
        System.out.println("================================================");
        System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
        System.out.println("[METHOD] : "+String.valueOf("userImageData"));
        System.out.println("[INPUT] : "+String.valueOf(param.toString()));
        System.out.println("================================================");
        System.out.println("\n");


        /**
         * // -----------------------------------------
         * [호출 방법]
         * // -----------------------------------------
         * 1. 호출 방식 : GET
         * // -----------------------------------------
         * 2. 호출 방법 : http://localhost:7000/userImageData
         * // -----------------------------------------
         * 3. 리턴 데이터 : html 이미지 태그에 표시할 data url
         * // -----------------------------------------
         * */


        // [리턴 반환 변수 선언 실시]
        String dataUrlString = "";


        // [get 방식 http 요청 수행 주소]
        String url = "https://i.pravatar.cc/150?img=3";
        //String url = "http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg";


        // [사진 정보를 담기 위한 BufferedImage 선언]
        BufferedImage image = null;


        // [http 요청 실시]
        try {

            // TODO [http 주소가 .jpg 또는 이미지 명칭으로 종료하는 경우]
            // String url = "http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg";


            // [URL 객체 사용해서 주소 지정 실시]
            URL imageUrl = new URL(url);


            // [BufferdImage 에 사진 정보 담기]
            image = ImageIO.read(imageUrl);
        }
        catch (Exception e) {
            //e.printStackTrace();

            // TODO [http link 로 종료 하는 경우]
            //String url = "https://i.pravatar.cc/150?img=3";
            try {

                // [URL 객체 사용해서 주소 지정 실시]
                URL imageUrl = new URL(url);


                // [http url 커넥션 설정 실시]
                HttpURLConnection connection = (HttpURLConnection) imageUrl.openConnection();
                connection.setRequestProperty(
                        "User-Agent",
                        "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0"
                );


                // [BufferdImage 에 사진 정보 담기]
                image = ImageIO.read(connection.getInputStream());
            }
            catch (Exception error){
                error.printStackTrace();
            }
        }

        // [로그 출력 실시]
        System.out.println("\n");
        System.out.println("================================================");
        System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
        System.out.println("[METHOD] : "+String.valueOf("userImageData"));
        System.out.println("[BufferedImage] : "+String.valueOf(image));
        System.out.println("================================================");
        System.out.println("\n");


        // [BufferedImage 가 null 이 아닌 경우 로직 처리]
        if (image != null){
            try {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ImageIO.write(image, "png", baos);

                String base64String = DatatypeConverter.printBase64Binary(baos.toByteArray());
                dataUrlString = "data:image/png;base64," + base64String;
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }


        // [로그 출력 실시]
        System.out.println("\n");
        System.out.println("================================================");
        System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
        System.out.println("[METHOD] : "+String.valueOf("userImageData"));
        System.out.println("[RETURN] : "+String.valueOf(dataUrlString));
        System.out.println("================================================");
        System.out.println("\n");


        // [Api 리턴 반환]
        return dataUrlString;
    }

[결과 출력]

 

 
반응형
Comments