/*** ClassName:Base64Util.java* Date:2020年2月27日*/
package com.sh.untils;import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.apache.commons.codec.binary.Base64;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.file.Path;
import java.util.HashMap;/*** Creater:SHAO Gaige* Description:* Log:*/
public class Base64Util {/*** 根据String path 生成二维码图片 并保存本地* 然后进行base64位读取 返回以流的形式*/public static void main(String[] args) {byte[] jfkjljjkljljs = stringtopng("jfkjljjkljlj", "F:/aaaa/111.png");System.out.println(jfkjljjkljljs);}public static byte[] stringtopng(String contcent,String path){//String contcent = "hello word";定义二维码内容//String path = "E:/img.png"int width = 150;int height = 150;String format = "png";//定义二维码参数HashMap hints = new HashMap();hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);hints.put(EncodeHintType.MARGIN,2);//生成二维码try {BitMatrix bitMatrix = new MultiFormatWriter().encode(contcent, BarcodeFormat.QR_CODE, width, height, hints);Path file = new File(path).toPath();//保存路劲MatrixToImageWriter.writeToPath(bitMatrix, format, file);//生成二维码byte[] bytes = Base64Util.inputStream2ByteArray(file.toString());//调取生成二维码路径,生成流的形式return bytes;} catch (Exception e) {e.printStackTrace();return null;}}public static boolean isBase64(String str){String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";Boolean isLegal = str.matches(base64Pattern);if (isLegal){return true;}else{return false;}}/*** 辅助方法,本地文件转为byte[]* @param filePath* @return*/public static byte[] inputStream2ByteArray(String filePath) {byte[] data = null;InputStream in = null;ByteArrayOutputStream out = null;try {in = new FileInputStream(filePath);out = new ByteArrayOutputStream();byte[] buffer = new byte[1024 * 4];int n = 0;while ((n = in.read(buffer)) != -1) {out.write(buffer, 0, n);}data = out.toByteArray();} catch (Exception e) {e.printStackTrace();} finally {try {in.close();out.close();} catch (Exception e) {//ignore}}return data;}/*** byte转图片* @param bytes* @param imagePath* @throws IOException*/public static void  byteToImg(String bytes, String imagePath) throws IOException{//    byte[] buffer = Base64.decode(bytes);   //接收网络中的要进过解码byte[] buffer = Base64.decodeBase64(bytes);  //接收网络中的要进过解码File file = new File(imagePath);FileOutputStream fos = new FileOutputStream(file);fos.write(buffer);fos.flush();fos.close();}/*** base64编码字符串* @param data* @return*/public static String base64encodeString(byte[] data) {return Base64.encodeBase64String(data);}/*base64转pdf*/public static void base64StringToPdf(String base64Content,String filePath){BASE64Decoder decoder = new BASE64Decoder();BufferedInputStream bis = null;FileOutputStream fos = null;BufferedOutputStream bos = null;try {byte[] bytes = decoder.decodeBuffer(base64Content);//base64编码内容转换为字节数组ByteArrayInputStream byteInputStream = new ByteArrayInputStream(bytes);bis = new BufferedInputStream(byteInputStream);File file = new File(filePath);File path = file.getParentFile();if(!path.exists()){path.mkdirs();}fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos);byte[] buffer = new byte[1024];int length = bis.read(buffer);while(length != -1){bos.write(buffer, 0, length);length = bis.read(buffer);}bos.flush();} catch (Exception e) {e.printStackTrace();}finally{try {bos.close();fos.close();bis.close();}catch (Exception e){e.printStackTrace();}}}/*base64转pdf*/public static void base64StringToPdf1(byte[] bytes,String filePath){BASE64Decoder decoder = new BASE64Decoder();BufferedInputStream bis = null;FileOutputStream fos = null;BufferedOutputStream bos = null;try {//byte[] bytes = decoder.decodeBuffer(base64Content);//base64编码内容转换为字节数组ByteArrayInputStream byteInputStream = new ByteArrayInputStream(bytes);bis = new BufferedInputStream(byteInputStream);File file = new File(filePath);File path = file.getParentFile();if(!path.exists()){path.mkdirs();}fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos);byte[] buffer = new byte[1024];int length = bis.read(buffer);while(length != -1){bos.write(buffer, 0, length);length = bis.read(buffer);}bos.flush();} catch (Exception e) {e.printStackTrace();}finally{try {bos.close();fos.close();bis.close();}catch (Exception e){e.printStackTrace();}}}public static String base64PdfToJpg(String base64Pdf) {String jpg_base64 = null;int pdfdpi = 400;BASE64Decoder decoder = new BASE64Decoder();byte[] pdf_bytes = null;try {pdf_bytes = decoder.decodeBuffer(base64Pdf);} catch (IOException e1) {e1.printStackTrace();}try (final PDDocument document = PDDocument.load(pdf_bytes)) {int size = document.getNumberOfPages();/*图像合并使用参数*/// 定义宽度int width = 0;// 保存一张图片中的RGB数据int[] singleImgRGB;// 定义高度,后面用于叠加int shiftHeight = 0;//保存每张图片的像素值BufferedImage imageResult = null;// 利用PdfBox生成图像PDDocument pdDocument = document;PDFRenderer renderer = new PDFRenderer(pdDocument);/*根据总页数, 按照50页生成一张长图片的逻辑, 进行拆分*/// 每50页转成1张图片int pageLength = size;  //有多少转多少// 总计循环的次数int totalCount = pdDocument.getNumberOfPages() / pageLength + 1;for (int m = 0; m < totalCount; m++) {for (int i = 0; i < pageLength; i++) {int pageIndex = i + (m * pageLength);if (pageIndex == pdDocument.getNumberOfPages()) {System.out.println("m = " + m);break;}// 96为图片的dpi,dpi越大,则图片越清晰,图片越大,转换耗费的时间也越多BufferedImage image = renderer.renderImageWithDPI(pageIndex, 106, ImageType.RGB);int imageHeight = image.getHeight();int imageWidth = image.getWidth();if (i == 0) {//计算高度和偏移量//使用第一张图片宽度;width = imageWidth;// 保存每页图片的像素值// 加个判断:如果m次循环后所剩的图片总数小于pageLength,则图片高度按剩余的张数绘制,否则会出现长图片下面全是黑色的情况if ((pdDocument.getNumberOfPages() - m * pageLength) < pageLength) {imageResult = new BufferedImage(width, imageHeight * (pdDocument.getNumberOfPages() - m * pageLength), BufferedImage.TYPE_INT_RGB);} else {imageResult = new BufferedImage(width, imageHeight * pageLength, BufferedImage.TYPE_INT_RGB);}} else {// 将高度不断累加shiftHeight += imageHeight;}singleImgRGB = image.getRGB(0, 0, width, imageHeight, null, 0, width);imageResult.setRGB(0, shiftHeight, width, imageHeight, singleImgRGB, 0, width);}//                     System.out.println("m = " + m);File outFile = new File("E://Test11.jpg");System.out.println(outFile.getName());// 写图片ImageIO.write(imageResult, "png", outFile);// 这个很重要,下面会有说明shiftHeight = 0;}pdDocument.close();ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流ImageIO.write(imageResult, "png", baos);//写入流中byte[] jpg_Bytes = baos.toByteArray();//转换成字节BASE64Encoder encoder = new BASE64Encoder();jpg_base64 = encoder.encodeBuffer(jpg_Bytes).trim();//转换成base64串jpg_base64 = jpg_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\nSystem.out.println(jpg_base64);//  System.out.println("值为:"+"data:image/jpg;base64,"+jpg_base64);} catch (Exception e) {e.printStackTrace();}return "data:image/jpg;base64,"+jpg_base64;}}

java根据内容生成二维码并保存到本地相关推荐

  1. java根据内容生成二维码

    java根据内容生成二维码 一.首先导入jar包:google.zxing.jar jar包可以从maven网站下载:meven仓库 这里可以找到你想要的绝大多数jar包,可以是依赖,也可以是jar包 ...

  2. VUE微信H5生成二维码海报保存在本地相册

    VUE微信H5生成二维码海报保存在本地相册 一.效果 二.说明 公司需求:宣传海报从后台获取,二维码地址也从后台获得,然后生成一个海报,海报上固定位置放二维码,长按图片可以保存在本地相册(其实前面的需 ...

  3. JAVA 生成二维码并保存到本地或文件服务器

    最近公司要做一个用户邀请的功能,生成二维码邀请用户就能获得积分奖励.于是就开发了一个小功能,二维码可以保存在本地,也可以利用FastFileStorage上传到文件服务器. pom文件用到的包 < ...

  4. Java利用Zxing生成二维码及解析二维码内容

    前言 Java 操作二维码的开源项目很多,如 SwetakeQRCode.BarCode4j.Zxing 等等 本篇文章是介绍利用Zxing来生成二维码图片在web网页上展示,同时解析二维码图片. Z ...

  5. java利用zxing生成二维码

    什么是ZXing? ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库. 利用ZXing这个工具库来生成二维码,具体操作如下: 引入相关资源包 <dependency&g ...

  6. 使用前端QrCode.js实现根据输入内容生成二维码,并提供二维码下载功能(已使用在交付项目中)

    前端QrCode 根据输入内容生成二维码,并提供二维码下载功能 简介:这是一个使用前端QrCode自动生成二维码并下载二维码图片的项目. 项目背景:在某个项目的交付阶段,客户提出需要一个可手动生成二维 ...

  7. java使用zxing生成二维码,可带logo和底部文字

    java使用zxing生成二维码,可带logo和底部文字 springboot中整合zxing生成二维码 一.导入依赖 <properties><zxing.version>3 ...

  8. java学习-zxing生成二维码矩阵的简单例子

    这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency><gro ...

  9. java将链接生成二维码工具类

    一.添加依赖 <!-- 生成二维码--><dependency><groupId>com.google.zxing</groupId><artif ...

最新文章

  1. CodeChef TWOROADS(计算几何+拉格朗日乘数法)
  2. 电脑声音推送到手机话筒_一台电脑是不是就能做在线教育直播了?
  3. linux diff命令_Linux diff命令示例
  4. 我的世界java手机版怎么调按键_如何在10秒内,让我的世界立即“自爆”?一个隐藏的mc快捷键...
  5. 奶牛健美操(codevs 3279)
  6. Python学习15 正则表达式1
  7. 异常捕获try...catch... c#
  8. 【原创】(十二)Linux内存管理之vmap与vmalloc
  9. ext store 数据修改_Vue 组件数据通信方案总结
  10. SpringMVC框架----SpringMVC的入门程序
  11. 用PostgreSQL运行文件中的SQL程序
  12. 易语言超级列表框怎么设置文本颜色_抖音超火的快闪动画怎么做?手把手教你!三分钟学会...
  13. linux+极点五笔输入法,Linux技巧之Ubuntu11.04下安装极点五笔输入法
  14. html好看的详情页面设计,40多个漂亮的网页表单设计实例
  15. horner算法matlab实现,使用Euclid和Horner算法的多项式求值
  16. My 2007 Fash game: Elite Shooter
  17. 数据库必知词汇:即席查询(Ad Hoc)
  18. java咖啡机故障5_咖啡机不得不知道的常见故障及解决方法
  19. 关于RO、RW、ZI的说明
  20. 结构体中使用冒号对位的操作

热门文章

  1. 从LoRaWAN服务器thethingsnetwork.org获取应用数据
  2. LuatOS快速上手——GPS定位
  3. 北京全市医保定点医疗机构直接社保
  4. 解密保存Mac版微信聊天记录的数据库文件并导出聊天记录
  5. 从REINFORCE到PPO,看Policy Gradient的前世今生
  6. python中*args,**args的区别
  7. CAD中的选择集过滤----DXFCode(一)
  8. 软件需求工程 高校教学平台 软件需求规格说明书 part 1 (重点!!!)
  9. 51NOD L4-第三章 树 刷题记录-zgw
  10. python读取excel画出饼状图_python操作Excel、openpyxl 之图表,折线图、饼图、柱状图等...