使用java进行Base64图像编码

时间:2012-10-29 09:57:44

标签: java spring base64

我正在尝试使用图片网址上的base64编码对图片进行编码。 但是它为所有URL提供了相同的编码。

我的代码如下:

Object namee = url.openConnection().getContentType();
String name = (String) namee;

BufferedImage image = ImageIO.read(url);  

//getting image extension from content type
String ext = name.substring(name.lastIndexOf("/") + 1); 

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ImageIO.write(image, ext, baos);
byte[] imageData = baos.toByteArray();
String base64value = Base64.encodeBase64URLSafeString(imageData);

2 个答案:

答案 0 :(得分:0)

此代码将您的图像文件/数据转换为Base64格式,这只是图像的文本表示。

要转换它,你需要Encoder&您将从http://www.source-code.biz/base64coder/java/获得的解码器。你需要的是File Base64Coder.java。

现在根据您的要求访问此课程,您将需要以下课程:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Base64 {

 public static void main(String args[]) throws IOException {
  /*
   * if (args.length != 2) {System.out.println(
   * "Command line parameters: inputFileName outputFileName");
   * System.exit(9); } encodeFile(args[0], args[1]);
   */
  File sourceImage = new File("back3.png");
  File sourceImage64 = new File("back3.txt");
  File destImage = new File("back4.png");
  encodeFile(sourceImage, sourceImage64);
  decodeFile(sourceImage64, destImage);
 }

 private static void encodeFile(File inputFile, File outputFile) throws IOException {
  BufferedInputStream in = null;
  BufferedWriter out = null;
  try {
   in = new BufferedInputStream(new FileInputStream(inputFile));
   out = new BufferedWriter(new FileWriter(outputFile));
   encodeStream(in, out);
   out.flush();
  } finally {
   if (in != null)
    in.close();
   if (out != null)
    out.close();
  }
 }

 private static void encodeStream(InputStream in, BufferedWriter out) throws IOException {
  int lineLength = 72;
  byte[] buf = new byte[lineLength / 4 * 3];
  while (true) {
   int len = in.read(buf);
   if (len <= 0)
    break;
   out.write(Base64Coder.encode(buf, 0, len));
   out.newLine();
  }
 }

 static String encodeArray(byte[] in) throws IOException {
  StringBuffer out = new StringBuffer();
  out.append(Base64Coder.encode(in, 0, in.length));
  return out.toString();
 }

 static byte[] decodeArray(String in) throws IOException {
  byte[] buf = Base64Coder.decodeLines(in);
  return buf;
 }

 private static void decodeFile(File inputFile, File outputFile) throws IOException {
  BufferedReader in = null;
  BufferedOutputStream out = null;
  try {
   in = new BufferedReader(new FileReader(inputFile));
   out = new BufferedOutputStream(new FileOutputStream(outputFile));
   decodeStream(in, out);
   out.flush();
  } finally {
   if (in != null)
    in.close();
   if (out != null)
    out.close();
  }
 }

 private static void decodeStream(BufferedReader in, OutputStream out) throws IOException {
  while (true) {
   String s = in.readLine();
   if (s == null)
    break;
   byte[] buf = Base64Coder.decodeLines(s);
   out.write(buf);
  }
 }
}

在Android中,您可以将Bitmap转换为Base64,以便上传到服务器/ Web服务。

Bitmap bmImage = //Data
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmImage.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageData = baos.toByteArray();
String encodedImage = Base64.encodeArray(imageData);

这个“encodedImage”是你的Image的文本表示。您可以将其用于上传目的或直接插入HTML页面,如下所示:

<img alt="" src="data:image/png;base64,<?php echo $encodedImage; ?>" width="100px" />
<img alt="" src="data:image/png;base64,/9j/4AAQ...........1f/9k=" width="100px" />

答案 1 :(得分:0)

以下是有关如何convert image to base64 with Java.

的工作示例
public static String encodeToString(BufferedImage image, String type) {
     String base64String = null;
     ByteArrayOutputStream bos = new ByteArrayOutputStream();
     try {
         ImageIO.write(image, type, bos);
         byte[] imageBytes = bos.toByteArray();
         BASE64Encoder encoder = new BASE64Encoder();
         base64String = encoder.encode(imageBytes);
         bos.close();
     } catch (IOException e) {
         e.printStackTrace();
     }
     return base64String;
}