이차원 코드 생성 Zxing 사진 오른쪽 하단 코너

1. <! - 링크에있어서, 이차원 코드를 생성 ->

   <의존성>
      <의 groupId> com.google.zxing </의 groupId>
      <artifactId를> 코어 </ artifactId를>
      <버전> 3.2.1 </ 버전>
   </ 의존성>
   <의존성>
      <의 groupId> com.google.zxing </의 groupId>
      <artifactId를> javase </ artifactId를>
      <버전> 3.3.3 </ 버전>
   </ 의존성>
</ 의존성>

  


 

2.util

com.xinlianpu.util 패키지;

수입 com.google.zxing.BarcodeFormat;
수입 com.google.zxing.EncodeHintType;
수입 com.google.zxing.MultiFormatWriter;
수입 com.google.zxing.WriterException;
수입 com.google.zxing.client.j2se.MatrixToImageWriter;
수입 com.google.zxing.common.BitMatrix;
수입 com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

수입 javax.imageio.ImageIO;
수입 javax.imageio.stream.ImageOutputStream;
java.awt의를 가져옵니다. *;
수입 java.awt.image.BufferedImage;
수입는 java.io *;
수입의 java.net.URL;
수입 java.util.HashMap에;
수입 java.util.Map;
수입 java.util.Objects;

/ **
 * 2019년 5월 9일에 Mafy 작성.
 * /
공용 클래스 ZxingUtils {
    공용 static BufferedImage의 enQRCode (문자열의 내용 INT 폭 INT 높이)를 WriterException {슬로우
        이차원 코드의 파라미터를 정의 //
        최종지도 <EncodeHintType, 개체> 힌트 = 새로운 HashMap의 (8) {
            {
                // 코딩
                (EncodeHintType.CHARACTER_SET를, "UTF-8") 넣어;
                // 내결함성의 수준
                (EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H)를 넣어;
                // 여백
                (EncodeHintType.MARGIN, 0)을 넣고;
            }
        };
        창 enQRCode (컨텐츠, 폭, 높이, 힌트);
    }


    / **
     * 이차원 코드 생성
     *
     * 2 차원 코드의 파라미터 : 콘텐츠 내용
     파라미터 : 폭 화상 폭
     파라미터 : 높이 이미지 높이
     파라미터 :이 차원 코드 관련 파라미터를 암시
     * @return의 BufferedImage 객체
     오류 * @throws WriterException 코딩
     파일 * @throws IOException이 오류 쓰기
     * /
    공공 정적 BufferedImage의 enQRCode (문자열 내용, INT 폭 INT 높이,지도 힌트) WriterException를 {던졌습니다
// 문자열 UUID = UUID.randomUUID의 toString () () 대체 ( "-", "")..;
        // 지역 전체 경로
// 문자열 경로 = 경로 + "/"+ UUID + "." + 포맷;
        이차원 코드를 생성 //
        BitMatrix bitMatrix 새로운 MultiFormatWriter = () 인 코드 (내용 BarcodeFormat.QR_CODE, 폭, 높이, 힌트).;
// 경로 파일 = 새로운 파일 (경로) .toPath ();
        // 저장 다음 경로에 두 개의 차원 코드
// MatrixToImageWriter.writeToPa (bitMatrix, 형식, 파일);
// 반환 경로;
        창 MatrixToImageWriter.toBufferedImage (bitMatrix);
    }


    / **
     * 사진은 배경에 그려진
     *
     파라미터 : backgroundPath 경로 배경
     파라미터 : zxingImage 사진
     배경에 그려진 그림 * @param X X 축의 시작점
     온 그린 파라미터 : Y 이미지 Y 축 포인트 배경 이미지를 시작
     * @return
     * /
    정적 공용의 BufferedImage의 drawImage (문자열 backgroundPath, BufferedImage의 zxingImage, INT (X), (Y)는 INT) {IOException가 슬로우
        // 사진 스트림의 배경을 읽을 수
        BufferedImage의 backgroundImage의;
        // 시도 -과 - 자원 자원이 자동으로 종료, 자동으로 종료 자원 () 메소드 일발 제한 닫기 가능한 또는 AutoCloseable 인터페이스 클래스를 달성하기 위해
        URL의 imgUrl에 새로운 URL (backgroundPath를) =;
// 시도 (의 InputStream imagein = 새로운 FileInputStream에 (backgroundPath)) {
// = backgroundImage의 ImageIO.read (imagein);
//}
        (의 InputStream imagein = 새로운 BufferedInputStream을 (를 imgurl.openStream ())) {시도
            또는 backgroundImage = ImageIO.read (imagein);
        }
        수익의 drawImage (backgroundImage의 zxingImage, X, Y);
    }


    / **
     * 사진은 배경에 그려진
     *
     파라미터 : backgroundImage의 배경
     파라미터 : zxingImage 사진
     배경에 그려진 그림 * @param X X 축의 시작점
     온 그린 파라미터 : Y 이미지 Y 축 포인트 배경 이미지를 시작
     * @return
     * IOException가 @throws
     * /
    정적 공용의 BufferedImage의 drawImage (BufferedImage의 backgroundImage의 BufferedImage의 zxingImage, INT (X), (Y)는 INT) {IOException가 슬로우
        Objects.requireNonNull (또는 backgroundImage는 ">>>>> 배경은 비어 있지 않습니다");
        Objects.requireNonNull (zxingImage는 ">>>>> 두 개의 차원 코드가 비어 있지 않습니다");
        // 이차원 코드는 백그라운드 + x 가로 길이 공감의 폭을 초과 할 수 없다
        경우 ((zxingImage.getWidth () + X)> backgroundImage.getWidth () || (zxingImage.getHeight () + Y)> backgroundImage.getHeight ()) {
            ( ">>>>> + x 가로 이차원 코드 백그라운드 공감 길이의 폭을 초과 할 수 없다") 새로운 IOException가 슬로우;
        }

        // 병합 사진
        Graphics2D의 g = backgroundImage.createGraphics ();
        g.drawImage (zxingImage, X, Y,
                zxingImage.getWidth () zxingImage.getHeight (), NULL);
        또는 backgroundImage를 반환;
    }

    / **
     * 텍스트는 배경에 그려진
     *
     파라미터 : backgroundImage의 배경
     파라미터 : X * x 축은도 1의 배경에 문자를 그리기위한 시작점.
     y 축의 원점에 그려진 배경 파라미터 : Y 자
     * @return
     * IOException가 @throws
     * /
    공공 정적 BufferedImage에 대해서 drawString (BufferedImage의 backgroundImage의, 문자열 텍스트, INT X, INT Y, 글꼴 글꼴, 색상 색상) {
        텍스트를 그리기 //
        Graphics2D의 g = backgroundImage.createGraphics ();
        // 색을 설정
        g.setColor (색상);
        계단 현상을 제거 //
        g.setRenderingHint (RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
        // 글꼴을 설정
        g.setFont (폰트);
        텍스트를 그리기 //
        g.drawString (텍스트, X, Y);
        또는 backgroundImage를 반환;
    }


    공공 정적의 InputStream bufferedImageToInputStream (BufferedImage의 backgroundImage의)는 IOException가 {던졌습니다
        (또는 backgroundImage는, "PNG로") 반환 bufferedImageToInputStream;
    }

    / **
     * 출력 스트림으로 또는 backgroundImage
     *
     파라미터 : backgroundImage의
     * @param 형식
     * @return
     * IOException가 @throws
     * /
    공공 정적의 InputStream bufferedImageToInputStream (BufferedImage의 backgroundImage의, 문자열 형식) IOException가 {던졌습니다
        를 ByteArrayOutputStream 기지국 = 새를 ByteArrayOutputStream ();
        (시도
                하는 ImageOutputStream
                        imOut = ImageIO.createImageOutputStream (BS)) {
            ImageIO.write (backgroundImage의 형식 imOut);
            의 InputStream이다 = 새이 InputStream (bs.toByteArray ());
            반환이다;
        }
    }

    / **
     * 저장 파일
     *
     * @param은
     파라미터 : 파일 이름
     * IOException가 @throws
     * /
    공공 정적 무효 SAVEFILE은 (의 InputStream는, 문자열 파일 이름입니다) IOException가 {던졌습니다
        (BufferedInputStream을가로 = 새로운 BufferedInputStream을 (이다) 시도;
             밖으로의 BufferedOutputStream = 새의 BufferedOutputStream (새 FileOutputStream에 (파일 이름))) {
            렌 값 int;
            바이트 [] B는 새로운 바이트 [1024] =;
            반면 (LEN (= in.read (b))! = -1) {
                out.write (b, 0, 렌);
            }
        }
    }
    // 원격 URL의 사진을 읽어 GET 폭과 높이
    공공 정적의 INT [] returnImgWH (URL URL) {
        INT [A는 새로운 지능 = [2];
        BufferedImage의 BI = NULL;
        imgwrong = 거짓 부울;
        {시도
            // 이미지를 읽어
            BI = javax.imageio.ImageIO.read (URL);
            시험{
                일부 사진이 잘못 인코딩 된 일반 파일의 사진을 보여줍니다 여부를 결정 //
                INT 나)를 bi.getType (=;
                imgwrong 사실 =;
            } 캐치 (예외 전자) {
                imgwrong = 거짓;
            }
        } 캐치 (IOException이 예) {
            ex.printStackTrace ();
        }
        경우 {(imgwrong)
            A [0] = bi.getWidth (); // GET 폭
            A [1] = bi.getHeight (); // 매우
        }그밖에{
            A = 널;
        }
        를 반환;
    }

    공공 정적 무효 메인 (문자열 []에 args) {
        // 2 차원 코드의 폭
        INT 폭 = 293;
        // 이차원 코드의 높이
        INT 높이 = 293;
        // 2 차원 코드 내용
        문자열 contcent = "http://192.168.4.162:8802/portal/courseActivity/detail?id=aed2fabfde70409ea0611d4eaf05dd6e:3b8b77dd-a63b-4555-abc0-2c0033af35be";
        BufferedImage의 zxingImage = NULL;
        {시도
            // D 바코드 이미지 스트림
            zxingImage = ZxingUtils.enQRCode (contcent, 폭, 높이);
        } 캐치 (WriterException 전자) {
            e.printStackTrace ();
        }
        // 배경 이미지 주소
        문자열 backgroundPath = "http://test-dfs.enterfaces.com/M00/00/51/CgYBa1zRe4iAM5e9AAEUUh_Ua8g311.jpg";
        의 InputStream inputStream을 = NULL;
        {시도
            URL URL = 새 URL (backgroundPath);
            INT [] BB = returnImgWH (URL);

            // 이차원 코드 및 배경 합성
            BufferedImage의 이미지 = ZxingUtils.drawImage (backgroundPath, zxingImage, BB [0] - 폭, BB [1] -height);
// // ----------------------------------------- 그리기 텍스트 --- --------------------------------------------------
// 글꼴 글꼴 = 글꼴 새 ( "마이크로 소프트 우아한 검은", Font.BOLD, 35);
// 문자열 텍스트 = "";
// = ZxingUtils.drawString 화상 (화상, 텍스트, 375, 647, 폰트, 새로운 컬러 (244,254,189));
// // ----------------------------------------- 그리기 텍스트 --- --------------------------------------------------
            // 사진은 inputStream을 차례
            inputStream을 ZxingUtils.bufferedImageToInputStream = (화상);
        } 캐치 (IOException이 전자) {
            e.printStackTrace ();
        }
        이미지 경로 // 저장
        "//99999.png D"; 문자열 originalFileName =
        {시도
            // 로컬 사진 저장
            ZxingUtils.saveFile (대한 InputStream originalFileName);
        } 캐치 (IOException이 전자) {
            e.printStackTrace ();
        }
    }
}

  

 

 

 

 

 

추천

출처www.cnblogs.com/mafy/p/11888879.html