ZXing을 사용하여 QR 코드 PNG 이미지를 성공적으로 만들 수 있지만 출력을 SVG 또는 EPS로 가져 오는 쉬운 방법이 없습니다.벡터 이미지에서 QR 코드 만들기
QRCodeWriter로 만든 BitMatrix 개체에서 벡터 이미지를 만들려면 어떻게해야합니까?
ZXing을 사용하여 QR 코드 PNG 이미지를 성공적으로 만들 수 있지만 출력을 SVG 또는 EPS로 가져 오는 쉬운 방법이 없습니다.벡터 이미지에서 QR 코드 만들기
QRCodeWriter로 만든 BitMatrix 개체에서 벡터 이미지를 만들려면 어떻게해야합니까?
내가 찾은 가장 쉬운 방법은 iText로 PDF를 작성한 다음 결과 PDF를 EPS 또는 SVG로 변환하는 것이 었습니다. PDF를 작성하는 코드는 다음과 같습니다.
@Test
public void testQRtoPDF() throws WriterException, FileNotFoundException, DocumentException, UnsupportedEncodingException {
final int s = 600;
int r = 1;
Charset charset = Charset.forName("UTF-8");
CharsetEncoder encoder = charset.newEncoder();
byte[] b = null;
try {
// Convert a string to UTF-8 bytes in a ByteBuffer
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(
"1éöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùò1" +
"2éöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùò2" +
"3éöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùò3" +
"4éöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùò4" +
"5éöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùò5" +
"6éöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùòïëéöàäèüùò6"));
b = bbuf.array();
} catch (CharacterCodingException e) {
System.out.println(e.getMessage());
}
String content = new String(b, "UTF-8");
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(2);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix qrCode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, s, s, hints);
Document doc = new Document(new Rectangle(s, s));
PdfWriter pdfWriter = PdfWriter.getInstance(doc, new FileOutputStream("qr-code.pdf"));
doc.open();
PdfContentByte contentByte = pdfWriter.getDirectContent();
contentByte.setColorFill(BaseColor.BLACK);
boolean d = false;
for (int x = 0; x < qrCode.getWidth(); x += r) {
for (int y = 0; y < qrCode.getHeight(); y += r) {
if (qrCode.get(x, y)) {
contentByte.rectangle(x, s - y, r, r);
contentByte.fill();
contentByte.stroke();
}
}
}
doc.close();
}
변환에 이미지 마술을 사용합니다. 그래서 같이 :
convert qr-code.pdf qr-code.eps
같은이가 좀 긴 내용으로이 코드를 테스트하고 최대 600 문자와 함께 일
작동하지 않습니다 SVG
convert qr-code.pdf qr-code.svg
에 대해 수행 할 수 없습니다. 이것은 아마 전화 나 화면의 카메라의 정밀도에 달려 있습니다.
가 나는 ZXing
JFreeSVG
(http://www.jfree.org/jfreesvg)에, 예를 들어 연결하는 아주 쉽게 ... 이것이 내가 아는 사람
UTF-8이 필요하지 않으면 ByteBuffer와 힌트를 생략하고 문자열을 직접 인코딩 할 수 있습니다. –
개인적으로 [inkscape tracing]을 사용합니다 (http://inkscape.org/doc /tracing/tutorial-tracing.html)을 PNG에 추가하면됩니다. 그러나이 대답이 효과가 있다면 그것을 사용할 수 있습니다. – comp500
오래된 질문을하지만이 작업을 수행하는 방법을 찾고 함께 오는 사람에 대한 희망 :
package org.jfree.demo;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import org.jfree.graphics2d.svg.SVGGraphics2D;
import org.jfree.graphics2d.svg.SVGUtils;
public class QRCodes {
public static void main(String[] args) throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode("http://www.jfree.org/jfreesvg",
BarcodeFormat.QR_CODE, 160, 160);
int w = bitMatrix.getWidth();
SVGGraphics2D g2 = new SVGGraphics2D(w, w);
g2.setColor(Color.BLACK);
for (int xIndex = 0; xIndex < w; xIndex = xIndex + bitMatrix.getRowSize()) {
for (int yIndex = 0; yIndex < w; yIndex = yIndex + bitMatrix.getRowSize()) {
if (bitMatrix.get(xIndex, yIndex)) {
g2.fillRect(xIndex, yIndex, bitMatrix.getRowSize(), bitMatrix.getRowSize());
}
}
}
SVGUtils.writeToSVG(new File("qrtest.svg"), g2.getSVGElement());
}
}
나는 벡터 형식으로 귀하의 필요성을 질문합니다. QR 코드는 완벽하게 정사각형 인 흑백 픽셀 세트입니다. 정절을 잃지 않고 무한대로 확장됩니다. 그래서 PNG로 저장합니다. –
PNG를 처리 할 수없는 기기가이 세상에 있습니다. 레이저 조각사가 그 중 하나입니다. 이것이 벡터 형식이 필요한 이유입니다. –