Usando o Zxing para implementar imagens incorporadas dos geradores de código QR possui um determinado valor de referência, como segue:
A idéia básica é primeiro usar a imagem do código QR gerada pelo ZXing, depois ler a imagem, inserir o ícone nela e depois emitir a imagem inteira.
Em projetos recentes, precisamos gerar códigos QR. Depois de encontrar alguns exemplos, alcançamos o efeito final. O código QR pode gerar formato de imagem (JPG, etc.) ou ser exibido na página da web. Este artigo é registrado apenas e há muitas semelhanças, então eu gostaria de esquecê -lo. . . .
NOTA: Para ferramentas que requerem embalagens Zxing, o processo geral é ler imagens incorporadas, converter o conteúdo em código QR, incorporar as imagens no código QR e produzir imagens.
Aqui está o código completo:
importar java.awt.basicstoke; importar java.awt.color; importar java.awt.graphics2d; importar java.awt.image; imagem java.awt.shape; import.mectângle.awt.geom.affineTransform; import java.awt.Geom.rectLectaL2s; java.awt.image.bufferedImage; importar java.io.file; importar java.io.ioException; importar java.util.hashmap; importar java.util.map; importTyTax.Imageio.imageio; import com.google.zxing.BarCeformat; com.google.zxing.multiformatwriter; importar com.google.zxing.writexception; importar com.google.zxing.common.bitmatrix; import com.google.zxing.qrcode.decoder.errorCorrectionvel; estático final int image_width = 80; private estático final int image_half_width = image_width / 2; private estático final int estrutura_width = 2; // Código QR Escreva Multifertwriter estático privado MutiWriter = new MultiformAlTwriter (); public static void main (string [] args) {try {// bitMatrix bitMatrix = multInFalMATWriter.Encode (conteúdo, barcodeFormat.qr_code, 400, 400, dicas); string content = "134000000"; // QR Content BufedImage Image = genBarcode (conteúdo 134000000 "; // qr contentimage = genBarcode (conteúdo 134000000"; // QR " if (! imageio.write (imagem, "jpg", novo arquivo ("f: //2122.jpg"))) {lança a nova ioexception ("não pudesse escrever uma imagem de formato"); } /** // Troque o código acima aqui e use o fluxo para lê -lo na página outputtStream OS = Response.getOutputStream (); if (! imageio.write (imagem, "jpg", os)) {lança a nova ioexception ("não pudesse escrever uma imagem de formato"); } **/} catch (writerexception e) {e.printStackTrace ();} catch (ioexception e) {// TODO GATE GENERATO AUTOMENTADO BLOCKE.printStacktrace ();}} private bufferImage toBufredImage (bitMatrix Matrix); matrix.getHeight (); bufferiMage imagem = new bufferiMage (largura, altura, tampão bufferImage.type_int_rgb); para (int x = 0; x <width; x ++) {para (int y = 0; y <altura; y ++) {image.setrgb (x, y, matrix. (y); BufferImage GenBarcode (conteúdo da string, int a largura, int altura, string srcimagePath) lança Writerexception, ioException {// Leia a imagem de origem bufferImage scaleImage = escala (srcimagePath, image_width, image_height, true); int [] [] srcpixels = new int [image_width] [image_height]; for (int i = 0; i <scaleImage.getwidth (); i ++) {for (int j = 0; j <scaleImage.getHeight (); j ++) {srcpixels [i] [j] = scaleImage.getRgb (i, j); }} Mapa <EncodeHIntType, objeto> Hint = new HashMap <EncodeHIntType, object> (); hint.put (codehinttype.character_set, "utf-8"); // Conteúdo que codifica Hint.put (codehinttype.error_correction, errorCorrectionLevel.h); // Nível de erro Hint.put (codehinttype.margin, 1); // Defina a largura da área em branco da borda externa do código QR // gerar o código QR bitMatrix matrix = mutiwriter.encode (content, barcodeformat.qr_code, largura, altura, dica); // converte a matriz 2D em uma matriz de pixel unidimensional int halfw = matrix.getwidth () / 2; int halfh = matrix.getHeight () / 2; int [] pixels = new int [largura * altura]; para (int y = 0; y <matrix.getHeight (); y ++) {for (int x = 0; x <matrix.getwidth (); x ++) {// Leia a imagem se (x> halfw - image_half_width && x <halfhth_half_width & & halfhhhfl -image_half -image_half -fage_half -figura {pixels [y * width + x] = srcpixels [x - halfw + image_half_width] [y - halfh + image_half_width]; } // formam uma borda ao redor da imagem mais if ((x> halfw - image_half_width - frame_width && x <halfw - image_half_width + frame_width && y> halfhf__half_width - frame_width && (halfh) Frame_width && x <halfw + image_half_width + frame_width && y> halfh - image_half_width - estrutura_width && y <halfh + image_half_width + frame_width) - Image_Half_Width - Frame_width && y <halfh - image_half_width + frame_width) || (x> halfw - image_half_width - frame_width && x <halfw + image_half_width + frame_width &&y> halfh +_half_wid_wid + image_half_width + frame_width &&y> halfh +_half_hf Frame_width)) {pixels [y * width + x] = 0xfffffffff; } else {// aqui você pode modificar a cor do código QR e pode formular as cores do código QR e do plano de fundo, respectivamente; pixels [y * width + x] = matrix.get (x, y)? 0xff000000: 0xffffffff; }}} BufferImage image = new bufferImage (largura, altura, bufferImage.type_int_rgb); image.getRaster (). setDataElements (0, 0, largura, altura, pixels); imagem de retorno; } /** * Escala a imagem original passada por altura e largura para gerar um ícone que atenda aos requisitos * * @param srcimagefile * Endereço do arquivo de origem * @param altura * altura do alvo * @param largura * largura do alvo * @param hasfiller * é necessário preencher quando a escala está incorreta: o verdadeiro é preenchido; Falso não está preenchendo; * @THOWS IOException */ Escala de buffer de estática privada (String srcImageFile, int altura, int largura, hasfiller booleano) lança IoException {razão dupla = 0,0; // arquivo de arquivo de escala = novo arquivo (srcImageFile); BufferImage srcimage = imageio.read (arquivo); Image Destimage = srcimage.getScaledInstance (largura, altura, bufferImage.scale_smooth); // calcule a escala if ((srcimage.getHeight ()> altura) || (srcimage.getwidth ()> width)) {if (srcimage.getHeight ()> srcimage.getwidth ()) {ratio (new integger (altura). } else {ratio = (new integer (largura)). DoubleValue () / srcimage.getWidth (); } AFFINETRANSFORMOP OP = new AffineTransformOp (afineTransform.getScaleInstance (razão, razão), nulo); destimage = op.filter (srcimage, nulo); } if (hasfiller) {// preenchendo bufferImage imagem = new bufferImage (largura, altura, bufferImage.type_int_rgb); Graphics2D Graphic = Image.CreateGraphics (); Graphic.setColor (color.pink); Graphic.FillRect (10, 10, largura, altura); Graphic.DrawRect (100, 360, largura, altura); if (width == Destimage.getWidth (null)) {Graphic.Drawimage (Destimage, 0, (altura - Destimage.getHeight (null)) / 2, destimage.getwidth (null), destimage.gethEight (null), cor.white, null); Forma da forma = novo RoundRectangle2d.float (0, (altura - Destimage.getHeight (NULL)) / 2, Largura, largura, 20, 20); Graphic.SetStroke (novo BasicStroke (5F)); Graphic.Draw (Shape); } else {Graphic.Drawimage (Destimage, (Width - Destimage.getWidth (null)) / 2, 0, Destimage.getWidth (null), Destimage.getHeight (null), cor.white, null); Forma da forma = novo RoundRectangle2d.float ((Largura - Destimage.getWidth (NULL)) / 2, 0, largura, largura, 20, 20); Graphic.SetStroke (novo BasicStroke (5F)); Graphic.Draw (Shape); } graphic.dispose (); destimage = imagem; } return (buffaredImage) Destimage; }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.