Java将byte[]转图片存储到本地的案例

Java中,将字节数组转成图片的有很多种方式,今天在这里记录其中一种,方便以后查询,也可以提供给没有接触的童鞋做一个参考。

首先是将图片转成字节数组

import sun.misc.BASE64Encoder;
import java.io.*;

// 传入图片路径,获取图片
FileInputStream fis = new FileInputStream("/Users/curry/error.png");
BufferedInputStream bis = new BufferedInputStream(fis);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buff = new byte[1024];
int len = 0;
while ((len = fis.read(buff)) != -1) {
  bos.write(buff, 0, len);
}
// 得到图片的字节数组
byte[] result = bos.toByteArray();
// 将数组转为字符串
BASE64Encoder encoder = new BASE64Encoder();
String str = encoder.encode(result).trim();

将数组转为图片

import sun.misc.BASE64Decoder;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

BASE64Decoder decoder = new BASE64Decoder();
byte[] imgbyte = decoder.decodeBuffer("刚刚将字节数组转成的字符串");
OutputStream os = new FileOutputStream("/Users/curry/text.png");
os.write(imgbyte, 0, imgbyte.length);
os.flush();
os.close();

补充知识:java将图片转化为base64和base64转化为图片编码并保存在本地

我就废话不多说了,大家还是直接看代码吧~

public class Base64Convert {

  /**
   * @Description: 图片转化成base64字符串
   * @param:  path
   * @Return:
   */
  public static String GetImageStr(String path)
  {
    //将图片文件转化为字节数组字符串,并对其进行Base64编码处理
    //待处理的图片
    String imgFile = path;
    InputStream in = null;
    byte[] data = null;
    //读取图片字节数组
    try
    {
      in = new FileInputStream(imgFile);
      data = new byte[in.available()];
      in.read(data);
      in.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
    //对字节数组Base64编码
    BASE64Encoder encoder = new BASE64Encoder();
    //返回Base64编码过的字节数组字符串
    return encoder.encode(data);
  }
  /**
   * @Description: base64字符串转化成图片
   * @param:   imgStr
   * @Return:
   */
  public static boolean GenerateImage(String imgStr,String photoname)
  {
    //对字节数组字符串进行Base64解码并生成图片
    //图像数据为空
    if (imgStr == null)
      return false;

    BASE64Decoder decoder = new BASE64Decoder();
    try
    {
      //Base64解码
      byte[] b = decoder.decodeBuffer(imgStr);
      for(int i=0;i<b.length;++i)
      {
        if(b[i]<0)
        {
          //调整异常数据
          b[i]+=256;
        }
      }
      //生成jpeg图片
      String imagePath= Config.getUploadPhysicalPath();
      //System.currentTimeMillis()
      //新生成的图片
      String imgFilePath = imagePath+photoname;
      OutputStream out = new FileOutputStream(imgFilePath);
      out.write(b);
      out.flush();
      out.close();
      return true;
    }
    catch (Exception e)
    {
      return false;
    }
  }
}

以上这篇Java将byte[]转图片存储到本地的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java实现文件保存到本地的方法

    本篇介绍了java实现文件保存到本地的方法,具体代码如下: private void savePic(InputStream inputStream, String fileName) { OutputStream os = null; try { String path = "D:\\testFile\\"; // 2.保存到临时文件 // 1K的数据缓冲 byte[] bs = new byte[1024]; // 读取到的数据长度 int len; // 输出的文件流保存到本地文

  • java实现从网上下载图片到本地的方法

    本文实例讲述了java实现从网上下载图片到本地的方法.分享给大家供大家参考.具体如下: import java.io.*; import java.net.MalformedURLException; import java.net.URL; public static void writeFile(String strUrl,String fileName){ URL url = null; try { url = new URL(strUrl); } catch (MalformedURLE

  • java 流与 byte[] 的互转操作

    1. InputStream -> byte[] 引入 apache.commons.is 包 import org.apache.commons.io.IOUtils; byte[] bytes = IOUtils.toByteArray(inputStream); 2. byte[] -> InputStream InputStream inputStream = new ByteArrayInputStream(bytes); 补充知识:byte[]与各种数据类型互相转换示例 在sock

  • Java将byte[]转图片存储到本地的案例

    Java中,将字节数组转成图片的有很多种方式,今天在这里记录其中一种,方便以后查询,也可以提供给没有接触的童鞋做一个参考. 首先是将图片转成字节数组 import sun.misc.BASE64Encoder; import java.io.*; // 传入图片路径,获取图片 FileInputStream fis = new FileInputStream("/Users/curry/error.png"); BufferedInputStream bis = new Buffere

  • Java 读取网络图片存储到本地并生成缩略图

    之前使用 Python 爬虫抓取电影网站信息作为自己网站的数据来源,其中包含的图片都是网络图片,会存在这样一个问题: 当原始网站访问速度比较慢时,网站图片加载时间也会变得很慢,而且如果原始网站挂了,图片就直接访问不到了. 此时的用户体验就很不好,所以对此进行了优化: 每次后端启动时会默认开启任务先将未转换的网络图片存储到本地,再把网页中图片列表改为访问本地图片,这样就解决了加载慢的问题,也降低了和原始网站的耦合性,具体步骤如下: 1.创建用于保存图片的文件夹 我的保存路径:F:\images 2

  • java实现图片上传至本地实例详解

    在工作中要求将图片上传至本地,如下代码将介绍如何将图片上传至本地 准备工作: 环境:eclipse4.5-x64,jdk1.7-x64,maven3 tomcat服务器配置图片上传映射: 上传至本地服务器配置文件:image.properties #\u672c\u5730\u670d\u52a1\u5668\u56fe\u7247\u4fdd\u5b58\u8def\u5f84 IMAGEPATH=/mall/upload/image/ #\u56fe\u7247\u540e\u7f00\u5

  • Java实现base64图片编码数据转换为本地图片的方法

    本文实例讲述了Java实现base64图片编码数据转换为本地图片的方法.分享给大家供大家参考,具体如下: 项目中用到的把base64图片数据转为本地图片的函数 /** * 替换html中的base64图片数据为实际图片 * @param html * @param fileRoot 本地路径 * @param serRoot 服务器路径 * @return */ public static String replaceBase64Image(String html,String fileRoot

  • Java下载远程服务器文件到本地(基于http协议和ssh2协议)

    Java中java.io包为我们提供了输入流和输出流,对文件的读写基本上都依赖于这些封装好的关于流的类中来实现.前段时间遇到了以下两种需求: 1.与某系统对接,每天获取最新的图片并显示在前端页面.该系统提供的是一个http协议的图片URL,本来获取到该系统的图片地址以后在HTML中显示就可以了,但是该系统不太稳定,图片URL经常不能使用,而且每天生成图片不一定成功, 对自己系统的功能影响很大,emm...所以就考虑每天从该系统下载最新的图片到本地更新保存,没有新图片就继续使用上次的图片. 2.公

  • Java并发编程示例(九):本地线程变量的使用

    共享数据是并发程序最关键的特性之一.对于无论是继承Thread类的对象,还是实现Runnable接口的对象,这都是一个非常周重要的方面. 如果创建了一个实现Runnable接口的类的对象,并使用该对象启动了一系列的线程,则所有这些线程共享相同的属性.换句话说,如果一个线程修改了一个属性,则其余所有线程都会受此改变的影响. 有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享.Java并发接口提供了一种很清晰的机制来满足此需求,该机制称为本地线程变量.该机制的性能也非常可观.

  • 浅谈java的byte数组的不同写法

    (由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"byte数组"里面全部是"byte",即每一个byte都可以用二进制.十六进制.十进制来表示. 二进制:00010110----->0*2^8 + 0*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 22 16进制: 0x16 -----

  • java 将byte中的有效长度转换为String的实例代码

    一般的我们使用byte接收读取到的数据,若数据没有达到byte定义的大小时,我们直接将byte转换为String则会出现乱码的情况,在这种情况下应该基于read的返回值来转换byte,否则将产生乱码的情况, 下面是一个简单的示例: package com.javaio.myinputstream; public class MyConsole { public static void main(String argv[]) throws Exception { System.out.printl

  • 基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xf

  • Java中byte、byte数组与int、long的转换详解

    一.Java 中 byte 和 int 之间的转换源码: //byte 与 int 的相互转换 public static byte intToByte(int x) { return (byte) x; } public static int byteToInt(byte b) { //Java 总是把 byte 当做有符处理:我们可以通过将其和 0xFF 进行二进制与得到它的无符值 return b & 0xFF; } 测试代码: //测试 int 转 byte int int0 = 234

随机推荐