2022-07-29:zxing生成二維碼

生成二維碼

核心工具類!!!!!

public class QRcodeUtil {

private static final Loggerlog = LoggerFactory.getLogger(QRcodeUtil.class);

? ? //CODE_WIDTH:二維碼寬度,單位像素

? ? private static final int CODE_WIDTH =400;

? ? //CODE_HEIGHT:二維碼高度陆错,單位像素

? ? private static final int CODE_HEIGHT =400;

? ? //FRONT_COLOR:二維碼前景色,0x000000 表示黑色

? ? private static final int FRONT_COLOR =0x000000;

? ? //BACKGROUND_COLOR:二維碼背景色,0xFFFFFF 表示白色

? ? //演示用 16 進(jìn)制表示立镶,和前端頁面 CSS 的取色是一樣的扎运,注意前后景顏色應(yīng)該對(duì)比明顯沼侣,如常見的黑白

? ? private static final int BACKGROUND_COLOR =0xFFFFFF;

? ? /** 創(chuàng)建內(nèi)容到二維碼,生成二維碼到本地赁项,二維碼圖片格式為png/jpg(png和jpg可以調(diào)換)

? ? * @param content

? ? * @param codeImgFileSaveDir

? ? * @param fileName

? ? * @return void

? ? * @date 2022/7/29 14:49

*/

? ? public static void createCodeToFile(String content, File codeImgFileSaveDir, String fileName) {

try {

if (!StringUtils.hasLength(content) || !StringUtils.hasLength(fileName)) {

return;

? ? ? ? ? ? }

content = content.trim();

? ? ? ? ? ? if (codeImgFileSaveDir ==null || codeImgFileSaveDir.isFile()) {

//二維碼圖片存在目錄為空,默認(rèn)放在桌面...

? ? ? ? ? ? ? ? codeImgFileSaveDir = FileSystemView.getFileSystemView().getHomeDirectory();

? ? ? ? ? ? }

if (!codeImgFileSaveDir.exists()) {

//二維碼圖片存在目錄不存在,開始創(chuàng)建...

? ? ? ? ? ? ? ? codeImgFileSaveDir.mkdirs();

? ? ? ? ? ? }

//核心代碼-生成二維碼

? ? ? ? ? ? BufferedImage bufferedImage =getBufferedImage(content);

? ? ? ? ? ? File codeImgFile =new File(codeImgFileSaveDir, fileName);

? ? ? ? ? ? ImageIO.write(bufferedImage, "png", codeImgFile);

? ? ? ? }catch (Exception e) {

e.printStackTrace();

? ? ? ? }

}

public static void main(String[] args) {

createCodeToFile("https://www.baidu.com",new File("D:/pic"),"123.png");

? ? }

/**

? ? * 生成二維碼并輸出到輸出流, 通常用于輸出到網(wǎng)頁上進(jìn)行顯示悠菜,輸出到網(wǎng)頁與輸出到磁盤上的文件中舰攒,區(qū)別在于最后一句 ImageIO.write

? ? * write(RenderedImage im,String formatName,File output):寫到文件中

? ? * write(RenderedImage im,String formatName,OutputStream output):輸出到輸出流中

? ? *

? ? * @param content? ? ? :二維碼內(nèi)容

? ? * @param outputStream :輸出流,比如 HttpServletResponse 的 getOutputStream

*/

? ? public static void createCodeToOutputStream(String content, OutputStream outputStream) {

try {

if (!StringUtils.hasLength(content)) {

return;

? ? ? ? ? ? }

content = content.trim();

? ? ? ? ? ? //核心代碼-生成二維碼

? ? ? ? ? ? BufferedImage bufferedImage =getBufferedImage(content);

? ? ? ? ? ? //區(qū)別就是這一句悔醋,輸出到輸出流中摩窃,如果第三個(gè)參數(shù)是 File,則輸出到文件中

? ? ? ? ? ? ImageIO.write(bufferedImage, "png", outputStream);

? ? ? ? ? ? log.info("二維碼圖片生成到輸出流成功...");

? ? ? ? }catch (Exception e) {

e.printStackTrace();

? ? ? ? }

}

//核心代碼-生成二維碼

? ? private static BufferedImagegetBufferedImage(String content)throws WriterException {

//com.google.zxing.EncodeHintType:編碼提示類型,枚舉類型

? ? ? ? Map hints =new HashMap();

? ? ? ? //EncodeHintType.CHARACTER_SET:設(shè)置字符編碼類型

? ? ? ? hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

? ? ? ? //EncodeHintType.ERROR_CORRECTION:設(shè)置誤差校正

? ? ? ? //ErrorCorrectionLevel:誤差校正等級(jí)芬骄,L = ~7% correction猾愿、M = ~15% correction、Q = ~25% correction账阻、H = ~30% correction

? ? ? ? //不設(shè)置時(shí)蒂秘,默認(rèn)為 L 等級(jí),等級(jí)不一樣宰僧,生成的圖案不同材彪,但掃描的結(jié)果是一樣的

? ? ? ? hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);

? ? ? ? //EncodeHintType.MARGIN:設(shè)置二維碼邊距,單位像素琴儿,值越小段化,二維碼距離四周越近

? ? ? ? hints.put(EncodeHintType.MARGIN, 1);

? ? ? ? MultiFormatWriter multiFormatWriter =new MultiFormatWriter();

//? ? ? ? BarcodeFormat.QR_CODE是設(shè)置為二維碼格式,

? ? ? ? BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, CODE_WIDTH, CODE_HEIGHT, hints);

? ? ? ? BufferedImage bufferedImage =new BufferedImage(CODE_WIDTH, CODE_HEIGHT, BufferedImage.TYPE_INT_BGR);

? ? ? ? for (int x =0; x

for (int y =0; y

bufferedImage.setRGB(x, y, bitMatrix.get(x, y) ?FRONT_COLOR :BACKGROUND_COLOR);

? ? ? ? ? ? }

}

return bufferedImage;

? ? }

}



使用方法1

如果是要傳遞給前端

@RequestMapping("test")

public void test(HttpServletResponse response)throws IOException {

????ServletOutputStream outputStream = response.getOutputStream();

? ? //第一個(gè)是設(shè)置掃描后內(nèi)容造成,第二個(gè)是返回的outstream流

? ? QRcodeUtil.createCodeToOutputStream("https://www.baidu.com",outputStream);

}


使用方法2

如果是要生成照片到本地路徑显熏,直接調(diào)用

第一個(gè)參數(shù)設(shè)置掃描后內(nèi)容,第二個(gè)是路徑地址晒屎,第三個(gè)是生成的文件名

createCodeToFile("https://www.baidu.com",new File("D:/pic"),"123.png");

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喘蟆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鼓鲁,更是在濱河造成了極大的恐慌蕴轨,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骇吭,死亡現(xiàn)場(chǎng)離奇詭異橙弱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)燥狰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門棘脐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人龙致,你說我怎么就攤上這事蛀缝。” “怎么了目代?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵屈梁,是天一觀的道長(zhǎng)嗤练。 經(jīng)常有香客問我,道長(zhǎng)俘闯,這世上最難降的妖魔是什么潭苞? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮真朗,結(jié)果婚禮上此疹,老公的妹妹穿的比我還像新娘。我一直安慰自己遮婶,他們只是感情好蝗碎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旗扑,像睡著了一般蹦骑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臀防,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天眠菇,我揣著相機(jī)與錄音,去河邊找鬼袱衷。 笑死捎废,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的致燥。 我是一名探鬼主播登疗,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嫌蚤!你這毒婦竟也來了辐益?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤脱吱,失蹤者是張志新(化名)和其女友劉穎智政,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箱蝠,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡女仰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抡锈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乔外,死狀恐怖床三,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杨幼,我是刑警寧澤撇簿,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布聂渊,位于F島的核電站,受9級(jí)特大地震影響四瘫,放射性物質(zhì)發(fā)生泄漏汉嗽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一找蜜、第九天 我趴在偏房一處隱蔽的房頂上張望饼暑。 院中可真熱鬧,春花似錦洗做、人聲如沸弓叛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撰筷。三九已至,卻和暖如春畦徘,著一層夾襖步出監(jiān)牢的瞬間毕籽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工井辆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留关筒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓掘剪,卻偏偏與公主長(zhǎng)得像平委,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夺谁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容