Java에 QRGen이라는 ZXing을 랩으로 포장한 QR 코드로 만든 프로그램 라이브러리가 있어서 해봤어요.

16190 단어 QRcodeJava

개시하다


Java로 QR 코드를 만드는 프로그램 라이브러리에 대해 말하자면 Google이 만든 ZXing을 잘 도입했다는 인상을 준다
실제로 사용해 보면 소스 코드가 낮고 얄미운 점이 좀 신경 쓰이는 것 같아요.
대충 쓰면 이런 느낌.
ZXing을 사용하여 QR 이미지를 생성할 때 소스 코드
BitMatrix matrix = new QRCodeWriter().encode(
    "https://qiita.com/nimzo6689", BarcodeFormat.QR_CODE, 320, 320
);
BufferedImage qrCodeImage = MatrixToImageWriter.toBufferedImage(matrix);
ImageIO.write(qrCodeImage, "png", Files.newOutputStream(Paths.get("qrcode.png")));
하지만 실제로는 대부분의 상황이 더 복잡해진다
예를 들어 페이지의 간격을 조정하고 문자 코드를 바꾸며 흑백이 아닌 색을 바꾸는 등이다.
또 길게 뻗어도 화질이 떨어지지 않고 SVG 파일로 출력되는 경우도 있다고 생각한다.
상술한 일을 실현하려면 여분의 저코드가 증가할 것이다
ZXing 랩으로 제작된 QRGen 라이브러리
최근에는 QR 이미지를 만들기 위해 메소드 체인을 간단하게 쓸 수 있다는 것을 알게 되었다
사용 방법을 총결하였다.

설치 방법


기본적으로 메이븐, 그레이드 등 포장 관리 도구에서 평상시처럼 사용
dependency를 추가하여 사용할 수 있습니다.
다만, 주의해야 할 점이 하나 있는데, 버전 2.1.0 이후
Maven Central에 게시되지 않았기 때문입니다.
jitpack.io 창고에 추가해야 합니다.
공식 페이지에 기재된 바와 같이Gradle은 다음과 같다.
build.gradle
apply plugin: 'java'

sourceCompatibility = 1.12

repositories {
    maven {
        url "https://jitpack.io"
    }
}

dependencies {
    // JavaSEで利用する場合。AndroidだとartifactIdがandroidになります。
    compile 'com.github.kenglxn.QRGen:javase:2.6.0'
}
ZXing은 두 개의 코어와 javase 또는 android와 의존성을 써야 한다
QRGen이라면 하나면 충분하니 가볍게 할 수 있다.

사용 예


나중에 로컬에서 시도한 원본 코드를 불러옵니다.
또한 QRGen은 명칭과 같이 QR코드를 위한 전용 라이브러리를 만들기 위해
검색하려면 ZXing API가 필요합니다.
또한 본 기사에 실린 코드는 다음과 같은 환경에서 검증되었습니다.
Windows10 Pro, Java12(AdoptOpenJDK with HotSpot), IntelliJ IDEA 2019
※ 이터레이션은 이후 2019/08/07 버전입니다.
문장의 샘플 코드는 import 문장 등을 생략하였으며 파일 전체를 확인하려면 Gist를 참조하십시오.
또 생성된 QR 이미지는 여기.의 안드로이드 앱을 통해 읽을 수 있음을 확인했다.

File 객체 생성 및 내보내기


먼저 File 객체를 만드는 방법입니다.QRCode#filetemp 디렉토리에 QRCode.png라는 이미지 파일 만들기
나는 그것을 출력하려고 했던 경로로 옮겼다.
같은 파일 이름으로 여러 번 쓸 수 있도록 지정했습니다 REPLACE_EXISTING.
QRGenToFile.java
File qrCode = QRCode.from("https://qiita.com/nimzo6689").file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png"), StandardCopyOption.REPLACE_EXISTING);
처음 쓴 견본 코드와 내용은 같지만 상당히 간단해졌다
ZXing의 API를 파악할 필요가 없기 때문에 구현이 쉽고 가독성도 높아진다.
실제 생성된 QR 이미지는 여기에 있습니다.
사이즈가 지정되지 않으면 125x125인 것 같습니다.

객체 생성 및 내보내기


그런 다음 Bytray OutStream 객체를 작성하는 방법입니다.
QRGenToBaos.java
try (ByteArrayOutputStream qrCode = QRCode.from("https://qiita.com/nimzo6689").stream();
        OutputStream outputStream = Files.newOutputStream(Paths.get("qrcode.png"))) {

    qrCode.writeTo(outputStream);
    qrCode.flush();
}
QRCode#file에 비해 코드량이 많아졌어요.
예: 통과ImageIO.read(new ByteArrayInputStream(qrCode.toByteArray()))
생성 BufferedImage 후 일부 이미지 처리를 할 때, 이것은 매우 편리할 것 같습니다.
그리고temp 파일도 만들지 않았기 때문에 성능도 이쪽이 좋아요.

생성된 OutputStream 객체로 내보내기

QRCode#stream 새로운 OutputStream 생성
생성된 OutputStream에 QR 이미지를 쓰려는 경우QRCode#writeTo를 사용할 수 있습니다.
QRGenToExistingOs.java
try (OutputStream os = Files.newOutputStream(Paths.get("qrcode.png"))) {
    QRCode.from("https://qiita.com/nimzo6689").writeTo(os);
    os.flush();
}
기술량비QRCode#stream가 적다.

다양한 설정값 출력 지정하기


생성할 QR 이미지의 이미지 형식, 크기 및 색상을 지정할 수 있습니다.
또한 ZXingEncodeHintType에서 지정한 설정 내용도 QRcode 대상을 통해 설정할 수 있다.
QRGenWithHint.java
File qrCode = QRCode.from("https://qiita.com/nimzo6689")
        .to(ImageType.GIF)
        .withSize(320, 320)
        .withColor(0xFF6876B4, 0xFFF7F4F7)
        .withCharset("UTF-8")
        .withErrorCorrection(ErrorCorrectionLevel.L)
        .withHint(EncodeHintType.MARGIN, 2)
        .file();

Files.copy(qrCode.toPath(), Paths.get("qrcode.gif"), StandardCopyOption.REPLACE_EXISTING);
withColor 지정된 값은 투명도(2 bytes) + RGB(6 bytes)의 형태입니다.
생성된 QR 이미지는 여기에 있습니다.

svg 파일로 내보내기


SVG 변환은 Javase에만 적용됩니다.
Android는 사용할 수 없지만 파일을 생성하지 않고 ImageView에 QR 이미지를 표시할 수 있습니다.QRCode#bitmap 사용 가능.(이번에는 검증되지 않음)
QRGenToSvg.java
File qrCode = QRCode.from("https://qiita.com/nimzo6689").svg();
Files.copy(qrCode.toPath(), Paths.get("qrcode.svg"), StandardCopyOption.REPLACE_EXISTING);
생성된qrcode.svg크롬등으로열면적당히나타난다.
QR 이미지의 화질에 구애되거나 큰 종이로 늘려 인쇄하려는 경우
큰 QR 이미지를 준비하지 않아도 되니 큰 도움이 됐습니다.

다양한 모드 시도


QR 이미지는 URL 이외에 메일 주소, 위치 정보, Wifi 등에도 사용
다양한 데이터 형식의 정보를 저장하는 몇 개의 Schema 객체도 제공합니다.README 총 16개 모드 지원
소스 코드를 보면 실제로는 많은 것 같아요.KddiAu도 있습니다.의식이 너무 높아!

Url 모드


웹 URL을 저장하는 모드입니다.
http나https에서 시작하는 문자열을 저장할 수 있습니다.
나는 이 대상QRCode::from을 통해 음식을 먹을 필요가 없다고 생각한다.
QRGenForUrl.java
Url url = Url.parse("https://qiita.com/nimzo6689");
File qrCode = QRCode.from(url).file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png"), StandardCopyOption.REPLACE_EXISTING);

전자 우편 모드


이것은 전자 우편 주소를 저장하는 모드입니다.mailto:メールアドレス 형식의 문자열을 저장할 수 있습니다.
쓰기도 가능new EMail("mailto:[email protected]")이렇게 하면 mailto:부터 시작하는 문자열의 검증 처리를 할 수 없기 때문입니다
기본적으로 사용하기EMail::parse가 비교적 적합하다.
QRGenForEmail.java
EMail email = EMail.parse("mailto:[email protected]");
File qrCode = QRCode.from(email).file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png"), StandardCopyOption.REPLACE_EXISTING);
읽고 시작하는 응용 프로그램에서 Gmail을 선택하고 To에 QR 이미지로 포함된 메일 주소를 입력합니다.

GeoInfo 모드


위치 정보의 패턴을 유지합니다.geo:latitude,longitude 형식의 문자열을 저장할 수 있습니다.
QR 이미지는 기본적으로 웹 사이트에 게시하는 것이 아니라 가게 등에서 웹 정보를 방문하고자 할 때 사용된다
위치 정보를 사용한 QR 이미지의 장면은 상상하기 어렵다.
나는 사용하는 곳이 매우 마음에 든다.
QRGenForGeoInfo.java
GeoInfo geoInfo = GeoInfo.parse("geo:35.6761775,139.7173954");
File qrCode = QRCode.from(geoInfo).file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png"), StandardCopyOption.REPLACE_EXISTING);
검증에 사용된 QR 인코더에 '지도 보이기' 와 '검색 경로' 메뉴를 표시합니다
"지도 보이기"라면 위치 정보의 주변 지도를 표시합니다
검색 경로는 현재 위치에서 해당 위치로 경로가 Google Map으로 표시됩니다.

끝말


로고 이미지를 중심으로 적절하게 설정할 수 있다면 더욱 좋겠다.

좋은 웹페이지 즐겨찾기