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 (); } } }