读取jar包文件 getResourceAsStream getClassLoader base64转图片文件

151 阅读3分钟

方式一: InputStream inputStream = getClass().getClassLoader().getResourceAsStream(".json");

 
private void buildRegionCode() {
    InputStream inputStream = getClass().getClassLoader().getResourceAsStream("static/RegionCode.json");

    byte[] bytes;
    try {
        bytes = new byte[inputStream.available()];
        inputStream.read(bytes);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    String str = new String(bytes);
    TypeToken<List<RegionCode>> token = new TypeToken<List<RegionCode>>() {
    };
    regionCodeList = GsonUtil.getGson().fromJson(str, token.getType());
}
 

Non-static method 'getClass()' cannot be referenced from a static context

方式二:Resource resource = new ClassPathResource(KEYPATH);

Resource resource = new ClassPathResource(KEYPATH);
InputStream in = resource.getInputStream();

前端后端base64 传输图片 ,ase64只是提供预览,其实可以保留原始的url传给后台的。

org.apache.commons.codec.binary.Base64.decodeBase64(这里传入src属性里的base64 的一串字符串);
不管是不是图片,如果你用的是base64,请保持相同的编解码器,比如apache.common和java.util中图片的解码是不同的

base64 解码方式1 binary.Base64

org.apache.commons.codec.binary.Base64

base64 解码方式2 util.Base64

java.util.Base64

字节流转成输入流 ByteArrayInputStream

方式1

InputStream inn = new ByteArrayInputStream(bytes);

输入流转成字节流 InputStream.read(bytesBase64);

byte[] bytesBase64 = new byte[resource.getInputStream().available()];

InputStream in = resource.getInputStream();
in.read(bytesBase64);

字节流转字符串 new String (byte[])

byte[] bytesBase64 = new byte[resource.getInputStream().available()];
in.read(bytesBase64);

String base64 = new String(bytesBase64);

inputStream 转成文件

 FileUtils.copyInputStreamToFile(inn,fileTarget);

inputStream 转成文件

  File fileTarget =  new File("F:\行程单及发票OFD\tmp.jpg");
  FileOutputStream fox = new FileOutputStream(fileTarget);
  fox.write(bytes);
  fox.flush();

字节流转OutputStream

OutputStream out = new FileOutputStream("F:\行程单及发票OFD\tmp.jpg");
out.write(bytes);
out.flush();
out.close();

读取jar base64字符串 文件

//读取jar包资源文件 为字符串
org.springframework.core.io.Resource resource = new ClassPathResource("zizhen");
byte[] bytesBase64 = new byte[resource.getInputStream().available()];
InputStream in = resource.getInputStream();
in.read(bytesBase64);
String base64OriginStr = new String(bytesBase64);

把images字符串修改一下,去掉base64头

image.png


//重要!!!去掉base64头
String images1 = images.substring(23);

方式一: 解密base64 图片字符串 为字节流

//
byte[] bytesX = Base64.decodeBase64(base64OriginStr);

方式一: 解密base64 图片字符串 为字节流

// Base64解码
byte[] bytes = decoder.decodeBuffer(base64OriginStr);

放大图片 通过双线性插值算法 zoomImage


public static BufferedImage zoomImage(BufferedImage originalImage, int newWidth, int newHeight) {
    BufferedImage zoomedImage = new BufferedImage(newWidth, newHeight, originalImage.getType());
    Graphics2D g = zoomedImage.createGraphics();
    g.drawImage(originalImage, 0, 0, newWidth, newHeight, null);
    g.dispose();
    return zoomedImage;
}

public static void main(String[] args) {
    try {
        // 读取原始图片
        BufferedImage originalImage = ImageIO.read(new File("F:\行程单及发票OFD\recoginse-small.jpg"));

        // 设置放大后的图片尺寸
        int newWidth = originalImage.getWidth() * 2;
        int newHeight = originalImage.getHeight() * 2;

        // 调用图片放大方法
        BufferedImage zoomedImage = zoomImage(originalImage, newWidth, newHeight);

        // 保存放大后的图片
        ImageIO.write(zoomedImage, "jpg", new File("F:\行程单及发票OFD\zoomed.jpg"));

        System.out.println("图片放大成功!");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

base64 转文件实占


public static void main(String[] args) throws Exception {

    //读取jar包资源文件 为字符串
    org.springframework.core.io.Resource resource = new ClassPathResource("zizhen");
    byte[] bytesBase64 = new byte[resource.getInputStream().available()];
    InputStream in = resource.getInputStream();
    in.read(bytesBase64);
    String base64OriginStr = new String(bytesBase64);
    base64OriginStr = base64OriginStr.substring(23);


    //解密base64 图片 为字节流
    byte[] bytesX = Base64.decodeBase64(base64OriginStr);

    for (int i = 0; i < bytesX.length; ++i) {
        if (bytesX[i] < 0) {// 调整异常数据
            bytesX[i] += 256;
        }
    }
    // Base64Util.GenerateImage(base64,"F:\行程单及发票OFD\tmp.jpg");

    BASE64Decoder decoder = new BASE64Decoder();
    try {
        // Base64解码
        byte[] bytes = decoder.decodeBuffer(base64OriginStr);
        for (int i = 0; i < bytes.length; ++i) {
            if (bytes[i] < 0) {// 调整异常数据
                bytes[i] += 256;
            }
        }

               File fileTarget =  new File("F:\行程单及发票OFD\tmp.jpg");
                FileOutputStream fox = new FileOutputStream(fileTarget);
                fox.write(bytesX);
                fox.flush();


        // 读取原始图片
        BufferedImage originalImage = ImageIO.read(new ByteArrayInputStream(bytesX));
        //  BufferedImage originalImage = ImageIO.read(new File("F:\行程单及发票OFD\recoginse-small.jpg"));

        // 设置放大后的图片尺寸
        int newWidth = originalImage.getWidth() * 2;
        int newHeight = originalImage.getHeight() * 2;

        // 调用图片放大方法
        BufferedImage zoomedImage = zoomImage(originalImage, newWidth, newHeight);

        // 保存放大后的图片
        ImageIO.write(zoomedImage, "jpg", new File("F:\行程单及发票OFD\zoomed1.jpg"));

        System.out.println("图片放大成功!");
    } catch (IOException e) {
        e.printStackTrace();
    }
}