Base64字符串与图片的相互转换

这篇具有很好参考价值的文章主要介绍了Base64字符串与图片的相互转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇博客记载的是一个我们在开发过程中很常用的一个小功能,就是我们在处理图片的时候做数据存放到数据库的功能,我们存放的不再是本地路径而是一个Base64的字符串!

然后我们在取值的时候又将Base64转换为一个图片文件的做法

简单的两个步骤:

一、导入工具类:

Base64Util:

package com.ruoyi.system.controller;

import java.io.ByteArrayOutputStream;
import java.io.File;
 import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

 import javax.imageio.stream.FileImageInputStream;

 import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

 public class Base64Util{
    /**
     * 字符串转图片
      * @param base64Str
      * @return
      */
    public static byte[] decode(String base64Str){
        byte[] b = null;
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            b = decoder.decodeBuffer(replaceEnter(base64Str));
        } catch (IOException e) {
            e.printStackTrace();
         }
        return b;
     }

    /**
     * 图片转字符串
     * @param image
     * @return
    */
    public static String encode(byte[] image){
        BASE64Encoder decoder = new BASE64Encoder();
        return replaceEnter(decoder.encode(image));
    }

    public static String encode(String uri){
        BASE64Encoder encoder = new BASE64Encoder();
        return replaceEnter(encoder.encode(uri.getBytes()));
    }

     /**
     *
     * @path    图片路径
     * @return
     */

    public static byte[] imageTobyte(String path){
        byte[] data = null;
        FileImageInputStream input = null;
        try {
            input = new FileImageInputStream(new File(path));
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int numBytesRead = 0;
            while((numBytesRead = input.read(buf)) != -1){
               output.write(buf, 0, numBytesRead);
            }
             data = output.toByteArray();
         output.close();
             input.close();

         } catch (Exception e) {
             e.printStackTrace();
         }

         return data;
    }



    public static String replaceEnter(String str){
        String reg ="[\n-\r]";
        Pattern p = Pattern.compile(reg);
        Matcher m = p.matcher(str);
        return m.replaceAll("");
    }


 }

ImageUtils:

package com.ruoyi.system.controller;


import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Transparency;
import java.net.HttpURLConnection;
import java.net.URL;
public class ImageUtils {
    public static String getBase64ByImgUrl(String url){
        String suffix = url.substring(url.lastIndexOf(".") + 1);
        try {
            URL urls = new URL(url);
            ByteArrayOutputStream  baos = new ByteArrayOutputStream();
            Image image = Toolkit.getDefaultToolkit().getImage(urls);
            BufferedImage  biOut = toBufferedImage(image);
            ImageIO.write(biOut, suffix, baos);
            String base64Str = Base64Util.encode(String.valueOf(baos.toByteArray()));
            return base64Str;
        } catch (Exception e) {
            return "";
        }
    }
    public static BufferedImage toBufferedImage(Image image) {
        if (image instanceof BufferedImage) {
            return (BufferedImage) image;
        }
        // This code ensures that all the pixels in the image are loaded
        image = new ImageIcon(image).getImage();
        BufferedImage bimage = null;
        GraphicsEnvironment ge = GraphicsEnvironment
                .getLocalGraphicsEnvironment();
        try {
            int transparency = Transparency.OPAQUE;
            GraphicsDevice gs = ge.getDefaultScreenDevice();
            GraphicsConfiguration gc = gs.getDefaultConfiguration();
            bimage = gc.createCompatibleImage(image.getWidth(null),
                    image.getHeight(null), transparency);
        } catch (HeadlessException e) {
            // The system does not have a screen
        }
        if (bimage == null) {
            // Create a buffered image using the default color model
            int type = BufferedImage.TYPE_INT_RGB;
            bimage = new BufferedImage(image.getWidth(null),
                    image.getHeight(null), type);
        }
        // Copy image to buffered image
        Graphics g = bimage.createGraphics();
        // Paint the image onto the buffered image
        g.drawImage(image, 0, 0, null);
        g.dispose();
        return bimage;
    }
    /**
     * 通过图片的url获取图片的base64字符串
     * @param imgUrl    图片url
     * @return    返回图片base64的字符串
     */
    public static String image2Base64(String imgUrl) {
        URL url = null;
        InputStream is = null;
        ByteArrayOutputStream outStream = null;
        HttpURLConnection httpUrl = null;
        try{
            url = new URL(imgUrl);
            httpUrl = (HttpURLConnection) url.openConnection();
            httpUrl.connect();
            httpUrl.getInputStream();
            is = httpUrl.getInputStream();
            outStream = new ByteArrayOutputStream();
            //创建一个Buffer字符串
            byte[] buffer = new byte[1024];
            //每次读取的字符串长度,如果为-1,代表全部读取完毕
            int len = 0;
            //使用一个输入流从buffer里把数据读取出来
            while( (len=is.read(buffer)) != -1 ){
                //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
                outStream.write(buffer, 0, len);
            }
            // 对字节数组Base64编码
            return Base64Util.encode(outStream.toByteArray());
        }catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            if(is != null)
            {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(outStream != null)
            {
                try {
                    outStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(httpUrl != null)
            {
                httpUrl.disconnect();
            }
        }
        return imgUrl;
    }
}

二、使用方式:

使用方式非常简单就是调用ImageUtils方法中的方法即可:

例如:我们使用图片转换Base64就直接传入一张图片的路径即可:
base64 转图片,java,mybatis文章来源地址https://www.toymoban.com/news/detail-613710.html

到了这里,关于Base64字符串与图片的相互转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • postman获取验证码图片(base64字符串格式)

    在 Tests 里编写脚本 然后,在响应体的 Visualize 里查看

    2024年02月12日
    浏览(39)
  • 图片文件和 Base64 字符串互转(Java 实现)

      项目中,有些场景下,客户端需要将本地图片传输到服务方存储,此时客户端可以将图片文件转为 Base64 字符串传输到服务方,服务方收到后再将 Base64 字符串还原为图片。以下是一些图片文件和 Base64 字符串互转的工具类,以及校验图片大小的工具。 一、依赖包 二、工

    2024年02月04日
    浏览(45)
  • uniapp 将base64字符串保存为图片、Word、Excel、音频、视频等文件

     uniapp 将base64字符串保存为图片、Word、Excel、音频、视频等文件 index.vue,复制运行此代码看效果,支持Android、iOS 参考文档: 1、uniapp中拿到base64转blob对象,或base64转bytes字节数组,io操作写入字节流文件bytes 2、录音文件与Base64编码相互转换的方法 3、关于base64保存为文件 4、

    2024年02月11日
    浏览(45)
  • 前端 base64与图片相互转换

    base64转图片 如下图:(后端返回的数据) base64转换图片文件 图片(url)转换base64 便捷的图片转化base64 利用 Chrome 浏览器,在 chrome 下新建一个窗口,然后把要转化的图片直接拖入浏览器,打开控制台,点 Source,如下图所示,点击图片,右侧就会显示该图片的 base64 编码

    2024年02月12日
    浏览(39)
  • PDF处理控件Aspose.PDF功能演示:使用Java将Base64字符串转换为PDF/JPG/PNG图像

    Aspose.PDF  是一款高级PDF处理API,可以在跨平台应用程序中轻松生成,修改,转换,呈现,保护和打印文档。无需使用Adobe Acrobat。此外,API提供压缩选项,表创建和处理,图形和图像功能,广泛的超链接功能,图章和水印任务,扩展的安全控件和自定义字体处理。 Aspose API支持

    2024年02月04日
    浏览(59)
  • 微信小程序 本地图片和base64图片相互转换

    wx.chooseImage === 从本地相册选择图片或使用相机拍照 wx.getFileSystemManager() === 获取全局唯一的文件管理器 wx.getFileSystemManager().readFile === 读取本地文件内容 wx.base64ToArrayBuffer() === 将 Base64 字符串转成 ArrayBuffer 对象 wx.downloadFile === 下载文件资源到本地 从手机上选择图片转base64 网络

    2024年02月03日
    浏览(35)
  • 图片与Base64编码相互转换、优势分析和技术实现

    在Web开发中,图片与Base64编码的相互转换是一个非常实用的技能。图片 Base64编码是将图片文件转换为字符串格式,以便于在网络上传输和存储。本文将详细介绍图片与Base64编码的转换方法,以及图片Base64编码的优势。 图片Base64相互转换 | 一个覆盖广泛主题工具的高效在线平

    2024年01月19日
    浏览(45)
  • uniapp图片转base64及JS各文件类型相互转换

    App H5 微信小程序 快手小程序 京东小程序 √ √ √ √ √ 功能限制主要在arrayBufferToBase64 微信小程序 字节跳动小程序 QQ小程序 √ √ √ 功能限制主要在getFileSystemManager H5 √ 功能限制主要在FileReader实例上 在 JavaScript 中的经常用到的二进制的格式有三种: ArrayBuffer:用来表示通

    2024年02月08日
    浏览(39)
  • Java Base64字符串与String字符串互转方法

    在使用String转Base64和Base64转String上有点小问题,特此记录。 结果: 也是跟上面差不多的思路,将Base64转为byte数组,再转为String

    2024年02月15日
    浏览(38)
  • 解决因base64字符串过长,报500的问题

    提示:后端用nodejs的express,前端是vue 当上传的图片小(base64字符串长度小)时,上传成功 当上传的图片大(base64字符串长度过长)时,上传失败,接口报500,服务器也报了一大堆的错误。 如果直接把base64字符串复制到数据库发现报错,提示数据太长,很明显是因为base64字符

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包