Java에 QRGen이라는 ZXing을 랩으로 포장한 QR 코드로 만든 프로그램 라이브러리가 있어서 해봤어요.
개시하다
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.gradleapply 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#file
temp 디렉토리에 QRCode.png
라는 이미지 파일 만들기
나는 그것을 출력하려고 했던 경로로 옮겼다.
같은 파일 이름으로 여러 번 쓸 수 있도록 지정했습니다 REPLACE_EXISTING
.
QRGenToFile.javaFile 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.javatry (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.javatry (OutputStream os = Files.newOutputStream(Paths.get("qrcode.png"))) {
QRCode.from("https://qiita.com/nimzo6689").writeTo(os);
os.flush();
}
기술량비QRCode#stream
가 적다.
다양한 설정값 출력 지정하기
생성할 QR 이미지의 이미지 형식, 크기 및 색상을 지정할 수 있습니다.
또한 ZXingEncodeHintType에서 지정한 설정 내용도 QRcode 대상을 통해 설정할 수 있다.
QRGenWithHint.javaFile 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.javaFile 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.javaUrl 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.javaEMail 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.javaGeoInfo 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으로 표시됩니다.
끝말
로고 이미지를 중심으로 적절하게 설정할 수 있다면 더욱 좋겠다.
Reference
이 문제에 관하여(Java에 QRGen이라는 ZXing을 랩으로 포장한 QR 코드로 만든 프로그램 라이브러리가 있어서 해봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nimzo6689/items/21280bf9dcacba26c5b8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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")));
기본적으로 메이븐, 그레이드 등 포장 관리 도구에서 평상시처럼 사용
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#file
temp 디렉토리에 QRCode.png
라는 이미지 파일 만들기
나는 그것을 출력하려고 했던 경로로 옮겼다.
같은 파일 이름으로 여러 번 쓸 수 있도록 지정했습니다 REPLACE_EXISTING
.
QRGenToFile.javaFile 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.javatry (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.javatry (OutputStream os = Files.newOutputStream(Paths.get("qrcode.png"))) {
QRCode.from("https://qiita.com/nimzo6689").writeTo(os);
os.flush();
}
기술량비QRCode#stream
가 적다.
다양한 설정값 출력 지정하기
생성할 QR 이미지의 이미지 형식, 크기 및 색상을 지정할 수 있습니다.
또한 ZXingEncodeHintType에서 지정한 설정 내용도 QRcode 대상을 통해 설정할 수 있다.
QRGenWithHint.javaFile 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.javaFile 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.javaUrl 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.javaEMail 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.javaGeoInfo 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으로 표시됩니다.
끝말
로고 이미지를 중심으로 적절하게 설정할 수 있다면 더욱 좋겠다.
Reference
이 문제에 관하여(Java에 QRGen이라는 ZXing을 랩으로 포장한 QR 코드로 만든 프로그램 라이브러리가 있어서 해봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nimzo6689/items/21280bf9dcacba26c5b8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
File qrCode = QRCode.from("https://qiita.com/nimzo6689").file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png"), StandardCopyOption.REPLACE_EXISTING);
try (ByteArrayOutputStream qrCode = QRCode.from("https://qiita.com/nimzo6689").stream();
OutputStream outputStream = Files.newOutputStream(Paths.get("qrcode.png"))) {
qrCode.writeTo(outputStream);
qrCode.flush();
}
try (OutputStream os = Files.newOutputStream(Paths.get("qrcode.png"))) {
QRCode.from("https://qiita.com/nimzo6689").writeTo(os);
os.flush();
}
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);
File qrCode = QRCode.from("https://qiita.com/nimzo6689").svg();
Files.copy(qrCode.toPath(), Paths.get("qrcode.svg"), StandardCopyOption.REPLACE_EXISTING);
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);
EMail email = EMail.parse("mailto:[email protected]");
File qrCode = QRCode.from(email).file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png"), StandardCopyOption.REPLACE_EXISTING);
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);
로고 이미지를 중심으로 적절하게 설정할 수 있다면 더욱 좋겠다.
Reference
이 문제에 관하여(Java에 QRGen이라는 ZXing을 랩으로 포장한 QR 코드로 만든 프로그램 라이브러리가 있어서 해봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nimzo6689/items/21280bf9dcacba26c5b8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)