Java version logo business card Two-dimensional code generation tool class

Source: Internet
Author: User

 package com.zzq;import java.awt.BasicStroke;import java.awt.Color;import  Java.awt.font;import java.awt.graphics;import java.awt.graphics2d;import java.awt.image;import  java.awt.Shape;import java.awt.font.FontRenderContext;import java.awt.geom.AffineTransform; import java.awt.geom.rectangle2d;import java.awt.geom.roundrectangle2d;import  java.awt.image.bufferedimage;import java.io.file;import java.io.outputstream;import  java.util.hashtable;import java.util.random;import javax.imageio.imageio;import  com.google.zxing.barcodeformat;import com.google.zxing.binarybitmap;import  com.google.zxing.decodehinttype;import com.google.zxing.encodehinttype;import  com.google.zxing.multiformatreader;import com.google.zxing.multiformatwriter;import  com.google.zxing.result;import com.google.zxing.client.j2se.bufferedimageluminancesource;import  com.google.zxing.common.bitmatrix;import com.google.zxing.common.hybridbinarizer;import  com.google.zxing.qrcode.decoder.errorcorrectionlevel;/** *  QR Code tool  *  Add your own  google  zxing Bag  *  */public class qrcodeutil { private static final  String CHARSET =  "Utf-8";  private static final string  format_name =  "JPG"; //  two-dimensional code size  private static final int qrcode_ Size = 300; // logo width  private static final int WIDTH =  60; // logo Height  private static final int height = 60; private  static bufferedimage createimage (string content, string imgpath,    boolean needcompress)  throws exception {  hashtable<encodehinttype,  object> hints = new hashtable<encodeHinttype, object> ();   hints.put (encodehinttype.error_correction, errorcorrectionlevel.h );   hints.put (Encodehinttype.character_set, charset);  // hints.put ( encodehinttype.margin, 1);   bitmatrix bitmatrix = new multiformatwriter (). Encode (content,    barcodeformat.qr_code, qrcode_size, qrcode_size, hints);   int width = bitmatrix.getwidth ();  int height =  Bitmatrix.getheight ();   bufferedimage image = new bufferedimage (width,  HEIGHT,&NBSP;&NBSP;&NBSP;&NBSP;BUFFEREDIMAGE.TYPE_INT_RGB);  for  (int x = 0;  x < width; x++)  {   for  (int y = 0; y  < height; y++)  {    image.setrgb (X, y, bitMatrix.get (x,  y) &NBSP;?&NBSP;0XFF000000&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;:&NBSP;0XFFFFFFFF);   }  }  if  (imgPath ==  null | |   ". Equals (Imgpath)  {   return image;  }  //  Insert Picture   qrcodeutil.insertimage (image, imgpath, needcompress);  return image;  } /**  *  inserting logo  *   *  @param  source  *              qr code images   *  @param   Imgpath  *            logo Photo Address    *  @param  needCompress  *              whether compression   *  @throws  exception  */ private static void  insertimage (bufferedimage source, string imgpath,   boolean  needcompress)  throws&nbsP Exception {  file file = new file (Imgpath);  if  (! File.exists ())  {   system.err.println ("+imgpath+"     the file does not exist!) ");    return;  }  image src = imageio.read (New File ( Imgpath));   int width = src.getwidth (null);  int height =  Src.getheight (NULL);  if  (needcompress)  { //  compression logo   if  ( Width > width)  {    width = WIDTH;   }    if  (height > height)  {    height = HEIGHT;    }   image image = src.getscaledinstance (Width, height,      image.scale_smooth);    bufferedimage tag = new  bufferedimage (WIDTH,&NBSP;HEIGHT,&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;BUFFEREDIMAGE.TYPE_INT_RGB);    graphics g = tag.getgraphics ();    g.drawimage (image, 0, 0, null); //  drawing a reduced figure        g.dispose ();   src = image;  }  //  insert logo   graphics2d graph = source.creategraphics ();  int x =  (QRCODE_ Size - width)  / 2;  int y =  (qrcode_size - height)  / 2;  graph.drawimage (src, x, y, width, height, null);   shape shape = new roundrectangle2d.float (X, y, width, width, 6, &NBSP;6);   graph.setstroke (New basicstroke (3f));   graph.draw (Shape);   Graph.dispose (); }  /**  *  generate text images    *  @param  str   *  @param  font  *  @param  outFile  *  @throws  Exception  *  @author  the _monster March 12, 2015   *  @version  1.0  */ public static void  Createimageforname (String str,font font,file outfile)  throws exception{ // Gets the font's style applied to the entire rectangle on the str    rectangle2d r=font.getstringbounds (str, new  FontRenderContext (Affinetransform.getscaleinstance (1, 1), false,false));   int  unitheight= (int) Math.floor (r.getheight ());//Gets the height of a single character  //gets the entire str with the width of the font style here with rounded after +1 to ensure that the width is absolutely able to hold this string as the width of the picture    int width= (int) Math.Round (R.getwidth ()) +1;   int height=unitheight+ 3;//the height of a single character +3 to ensure that the height can hold the string as the height of the picture  //create a picture    bufferedimage image=new bufferedimage (WIDTH,HEIGHT,BUFFEREDIMAGE.TYPE_INT_BGR);    graphics g=image.getgraphics ();    g.setcolor (color.white);  &nBsp; g.fillrect (0, 0, width, height);//First fill the entire picture with white, which is the background    g.setcolor ( Color.Black);//Change to Black    g.setfont (font);//Set Brush font    g.drawstring (str, 0,  font.getsize ());//Draw the string    g.dispose ();    imageio.write (image,  "PNG",  outfile);//output PNG image  }     /**  *  generate two-dimensional code (embedded logo)   *    *  @param  content  *              content   *  @param  imgPath  *             logo address   *  @param  destPath  *              Storage directory   *  @param   needcompress  *             whether to compress logo   *  @throws &NBSP;EXCEPTION&NBSP;&NBsp;*/ public static void encode (string content, string imgpath,  string destpath,   boolean needcompress)  throws Exception {   bufferedimage image = qrcodeutil.createimage (content, imgpath,     needcompress);   mkdirs (DestPath);   string file = new random (). Nextint (99999999) + ". jpg";   imageio.write (Image, format_name, new file (destPath+ "/" + File); } /**  *  When a folder does not exist, Mkdirs automatically creates a multi-tier directory, which differs from mkdir. (MkDir throws an exception if the parent directory does not exist)   *  @author  lanyuan  * Email: [email  protected]  *  @date  2013-12-11  Morning 10:16:36  *  @param  destpath   Storage Directory   */ public static void mkdirs (String destpath)  {   file file =new file (destpath);       //when a folder does not exist, Mkdirs automatically creates a multi-tiered directory, which differs from mkdir. (MkDir throws an exception if the parent directory does not exist)   if  (!file.exists ()  && !file.isdirectory ())  {    file.mkdirs ();  } } /**  *  generate two-dimensional code (embedded logo)   *    *  @param  content  *              content   *  @param  imgPath  *             logo address   *  @param  destPath  *              Storage address   *  @throws   Exception  */ public static void encode (string content, string  Imgpath, string destpath)    throws exception {  qrcodeutil.encode (content, imgpath, destpath, false); } /**  *  generate QR code &NBSP;&NBSP;*&NBsp;  *  @param  content  *              content   *  @param  destPath  *              Storage address   *  @param  needCompress  *              whether to compress logo  *  @throws  exception   */ public static void encode (String content, string destpath,    boolean needcompress)  throws exception {  qrcodeutil.encode ( content, null, destpath, needcompress); } /**  *  generate QR code   *    *  @param  content  *              content   *  @param  destPath  *              Storage address   *  @throws  Exception  */ public static void  Encode (String content, string destpath)  throws Exception {   Qrcodeutil.encode (Content, null, destpath, false); } /**  *  generates two-dimensional code ( Embedded logo)   *   *  @param  content  *              content   *  @param  imgPath  *             logo address   *  @param  output   *             output Stream   *  @param  needCompress  *             Whether to compress logo  *  @throws  exception  */ public static void encode ( String content, string imgpath,   outputstream output, boolean needcompress)  throws Exception  {  bufferedimage image = qrcodeutil.createimage (content, imgPath,     needcompress);   imageio.write (image, format_name, output);  } / **  *  generating QR codes   *   *  @param  content  *              content   *  @param  output   *             output Stream   *  @throws  exception  */ public static void encode (String content,  Outputstream output)    throws exception {  qrcodeutil.encode (content,  null, output, false); } /**  *  parsing two-dimensional code   *   *   @param  file  *             qr code images   *  @return    *  @throws  exception  */ public static string decode (File  File)  throws Exception {  BufferedImage image;  image =  Imageio.read (file);  if  (image == null)  {   return null;   }  BufferedImageLuminanceSource source = new  Bufferedimageluminancesource (    image);  binarybitmap bitmap =  New binarybitmap (New hybridbinarizer (source));   result result;  hashtable <decodehinttype, object> hints = new hashtable<decodehinttype, object > (  hints.put);   result = new (Decodehinttype.character_set, charset);  multiformatreader (). Decode (Bitmap, hints);   string resultstr = result.gettext ();   return resultstr; }  /**  *  parsing QR code   *   *  @param  path  *              QR code image address   *  @return    *  @throws  exception  */ public static string decode (String  Path)  throws exception {  return qrcodeutil.decode (New File (path));  }  /**  * Test  *  @param  args  *  @throws  exception   *  @author  the_monster March 17, 2015   *  @version  1.0  */  Public static void main (String[] args)  throws exception {  string  text =  "Zhangzhiqin";   //the content here is the format of the business card's QR code    must be in this format   String  content =  "Mecard:n: Laureatetel:00000000000;tel:13304012214; email:[email protected]; url:http://zzqnobody.blog.51cto.com; ADR: Shanghai; ";   //first create the text picture   createimageforname (Text,new font ("Arial", font.bold,18), New file ("c:/ A.jpg ")   encode (content, " e:/a.jpg ", " C:/barcode ",  true);   SYSTEM.OUT.PRINTLN ("---success");  }}


This article is from the "The_monster" blog, make sure to keep this source http://zzqnobody.blog.51cto.com/7059797/1621599

Java version logo business card Two-dimensional code generation tool class

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.