国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java生成彩色附logo二維碼

java生成彩色附logo二維碼

2020-04-17 11:57lijiao JAVA教程

這篇文章主要為大家介紹了java生成帶logo的多彩二維碼,比一般二維碼顏色鮮艷,美觀,如何生成二維碼,下面小編為大家分享實現(xiàn)代碼,感興趣的小伙伴們可以參考一下

java生成二維碼有很多開發(fā)的jar包如zxing是谷歌開發(fā)的,這里的話我使用zxing的開發(fā)包來實現(xiàn)的。我們在很多項目中需要動態(tài)生成二維碼,來提供給用戶,這樣讓更多人能夠很好的通過二維碼來體驗自己的應用。

下面貼出代碼,已經(jīng)測試通過,大家可以直接復制代碼使用:

最后實現(xiàn)結果:

java生成彩色附logo二維碼

java生成二維碼

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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.io.UnsupportedEncodingException;
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 MatrixToImageWriter {
 private static final int IMAGE_WIDTH = 100;
 private static final int IMAGE_HEIGHT = 100;
 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);
  // 二維矩陣轉(zhuǎn)為一維像素數(shù)組
  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++) {
    // 左上角顏色,根據(jù)自己需要調(diào)整顏色范圍和顏色 
    if (x > 0 && x < 170 && y > 0 && y < 170) {
     Color color = new Color(231, 144, 56);
     int colorInt = color.getRGB();
     pixels[y * width + x] = matrix.get(x, y) ? colorInt
       : 16777215;
    }
    // 讀取圖片
    else 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 > halfW - 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 {
     // 二維碼顏色
     int num1 = (int) (50 - (50.0 - 13.0) / matrix.getHeight()
       * (y + 1));
     int num2 = (int) (165 - (165.0 - 72.0) / matrix.getHeight()
       * (y + 1));
     int num3 = (int) (162 - (162.0 - 107.0)
       / matrix.getHeight() * (y + 1));
     Color color = new Color(num1, num2, num3);
     int colorInt = color.getRGB();
     // 此處可以修改二維碼的顏色,可以分別制定二維碼和背景的顏色;
     pixels[y * width + x] = matrix.get(x, y) ? colorInt
       : 16777215;
     // 0x000000:0xffffff 
    }
   }
  }
  BufferedImage image = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);
  image.getRaster().setDataElements(0, 0, width, height, pixels);
  return image;
 }
 
 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) throws UnsupportedEncodingException {
  // 依次為內(nèi)容(不支持中文),寬,長,中間圖標路徑,儲存路徑
  MatrixToImageWriter.encode("http://www.baidu.com/", 512, 512,
    "D:\\logo.png", "D:\\2013-01.jpg");
 
 }
}

以上就是本文的全部內(nèi)容,幫助大家設計屬于自己的二維碼。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 爱色av| 久久国产成人 | 天天干夜夜操 | 日本久久成人 | 国产精品欧美一区二区三区 | 桃色五月| 欧美天堂一区二区三区 | 午夜免费视频 | 人人鲁人人莫一区二区三区 | 青青操原| 日日摸夜夜添夜夜添特色大片 | 九九亚洲| 亚洲精品一区在线 | 91精品免费在线观看 | 久久女人精品 | 国产精品高潮呻吟久久 | 国产精品久久久久久久久久久新郎 | 午夜欧美一区二区三区在线播放 | 久久久久久久av | 日韩欧美在线综合 | 亚洲国产一区二区三区 | 大象一区 | 国产剧情一区二区 | 久久精品亚洲精品 | 日韩成人在线影院 | 国产精品久久久久久久久免费桃花 | 一级黄色a| 欧美日韩91 | 中文字幕精品一区二区三区精品 | 免费三级黄色片 | 中文字幕一区二区三区日韩精品 | 亚洲一区二区在线播放 | 国产一区二区三区四 | av在线一区二区三区 | 在线成人福利 | 久久精品成人免费视频 | 五月天综合网 | 韩国一区二区视频 | 欧美成人a | 亚洲一区二区三区在线播放 | 欧美日韩国产精品一区二区 |