java????????????????
???????????? ???????[ 2016/12/26 10:56:20 ] ??????????????????? Java
????import java.awt.Color;
????import java.awt.Graphics2D;
????import java.awt.Image;
????import java.awt.geom.AffineTransform;
????import java.awt.image.AffineTransformOp;
????import java.awt.image.BufferedImage;
????import java.io.File;
????import java.io.IOException;
????import java.util.HashMap;
????import java.util.Map;
????import javax.imageio.ImageIO;
????import com.google.zxing.BarcodeFormat;
????import com.google.zxing.EncodeHintType;
????import com.google.zxing.MultiFormatWriter;
????import com.google.zxing.WriterException;
????import com.google.zxing.common.BitMatrix;
????import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
????public class QREncodeWithPic {
????// ?????????
????private static final int IMAGE_WIDTH = 80;
????private static final int IMAGE_HEIGHT = 80;
????private static final int IMAGE_HALF_WIDTH = IMAGE_WIDTH / 2;
????private static final int FRAME_WIDTH = 2;
????// ?????д????
????private static MultiFormatWriter mutiWriter = new MultiFormatWriter();
????public static void encode(String content?? int width?? int height??
????String srcImagePath?? String destImagePath) {
????try {
????ImageIO.write(genBarcode(content?? width?? height?? srcImagePath)??
????"jpg"?? new File(destImagePath));
????} catch (IOException e) {
????e.printStackTrace();
????} catch (WriterException e) {
????e.printStackTrace();
????}
????}
????private static BufferedImage genBarcode(String content?? int width??
????int height?? String srcImagePath) throws WriterException??
????IOException {
????// ???????
????BufferedImage scaleImage = scale(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);
????}
????}
????Map<EncodeHintType?? Object> hint = new HashMap<EncodeHintType?? Object>();
????hint.put(EncodeHintType.CHARACTER_SET?? "utf-8");
????hint.put(EncodeHintType.ERROR_CORRECTION?? ErrorCorrectionLevel.H);
????// ????????
????BitMatrix matrix = mutiWriter.encode(content?? BarcodeFormat.QR_CODE??
????width?? height?? hint);
????// ???????????????????
????int halfW = matrix.getWidth() / 2;
????int halfH = matrix.getHeight() / 2;
????int[] pixels = new int[width * height];
????for (int y = 0; y < matrix.getHeight(); y++) {
????for (int x = 0; x < matrix.getWidth(); x++) {
????// ?????
????if (x > halfW - IMAGE_HALF_WIDTH
????&& x < halfW + IMAGE_HALF_WIDTH
????&& y > halfH - IMAGE_HALF_WIDTH
????&& y < halfH + IMAGE_HALF_WIDTH) {
????pixels[y * width + x] = srcPixels[x - halfW
????+ IMAGE_HALF_WIDTH][y - halfH + IMAGE_HALF_WIDTH];
????}
????// ?????????γ???
????else if ((x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH
????&& x < halfW - IMAGE_HALF_WIDTH + FRAME_WIDTH
????&& y > halfH - 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 - 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 - 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 + IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH
????+ IMAGE_HALF_WIDTH + FRAME_WIDTH)) {
????pixels[y * width + x] = 0xfffffff;
????} else {
????// ?????????????????????????????????????????????
????pixels[y * width + x] = matrix.get(x?? y) ? 0xff000000
????: 0xfffffff;
????}
????}
????}
????BufferedImage image = new BufferedImage(width?? height??
????BufferedImage.TYPE_INT_RGB);
????image.getRaster().setDataElements(0?? 0?? width?? height?? pixels);
????return image;
????}
????/**
????* ???????????????????????????????????????
????*
????* @param srcImageFile
????* ???????
????* @param height
????* ?????
????* @param width
????* ?????
????* @param hasFiller
????* ????????????????????true?????; false???????;
????* @throws IOException
????*/
????private static BufferedImage scale(String srcImageFile?? int height??
????int width?? boolean hasFiller) throws IOException {
????double ratio = 0.0; // ???????
????File file = new File(srcImageFile);
????BufferedImage srcImage = ImageIO.read(file);
????Image destImage = srcImage.getScaledInstance(width?? height??
????BufferedImage.SCALE_SMOOTH);
????// ???????
????if ((srcImage.getHeight() > height) || (srcImage.getWidth() > width)) {
????if (srcImage.getHeight() > srcImage.getWidth()) {
????ratio = (new Integer(height)).doubleValue()
????/ srcImage.getHeight();
????} else {
????ratio = (new Integer(width)).doubleValue()
????/ srcImage.getWidth();
????}
????AffineTransformOp op = new AffineTransformOp(
????AffineTransform.getScaleInstance(ratio?? ratio)?? null);
????destImage = op.filter(srcImage?? null);
????}
????if (hasFiller) {// ????
????BufferedImage image = new BufferedImage(width?? height??
????BufferedImage.TYPE_INT_RGB);
????Graphics2D graphic = image.createGraphics();
????graphic.setColor(Color.white);
????graphic.fillRect(0?? 0?? width?? height);
????if (width == destImage.getWidth(null))
????graphic.drawImage(destImage?? 0??
????(height - destImage.getHeight(null)) / 2??
????destImage.getWidth(null)?? destImage.getHeight(null)??
????Color.white?? null);
????else
????graphic.drawImage(destImage??
????(width - destImage.getWidth(null)) / 2?? 0??
????destImage.getWidth(null)?? destImage.getHeight(null)??
????Color.white?? null);
????graphic.dispose();
????destImage = image;
????}
????return (BufferedImage) destImage;
????}
????public static void main(String[] args) {
????QREncodeWithPic
????.encode("http://weixin.qq.com/r/h685IaDEkf3ureRC9-qV"??
????600?? 600?? "D:\lux.png"?? "D:\qr.png");
????}
????}
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11