Java 图片转二进制及生成图片
根据上一篇文章而来,算是一个补充吧。
JAR包下载地址:http://download.csdn.net/detail/pplsunny/9635268
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Image2Binary
{
public static void main(String[] args)
{
String path = "V:/test.bmp";
File file = new File(path);
FileInputStream fis;
try
{
fis = new FileInputStream(file);
byte[] b;
b = new byte[fis.available()];
StringBuilder str = new StringBuilder();// 不建议用String
fis.read(b);
for (byte bs : b)
{
str.append(Integer.toBinaryString(bs));// 转换为二进制
}
System.out.println(str);
File apple = new File("V:/test2.bmp");// 把字节数组的图片写到另一个地方
FileOutputStream fos = new FileOutputStream(apple);
fos.write(b);
fos.flush();
fos.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
替代方案
最好的方式就是用其他jar包替换:
比如:commons-codec
maven: poml.xml 添加下面依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.7</version>
</dependency>
用org.apache.commons.codec.binary.Base64类进行编码
package ppl;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.apache.commons.codec.binary.Base64;
public class ImageTest {
public static void main(String[] args) {
//System.out.println(getImageBinary());
base64StringToImage(getImageBinary());
byte[] bytes1 = Base64.decodeBase64(getImageBinary());
String savePath="C://templates";
String saveName="121.jpg";
int flag=saveToImgByStr(bytes1,savePath,saveName);
System.out.println(flag);
}
static String getImageBinary() {
//File f = new File("C://templates//ttt.jpg");
File f = new File("C://templates//1474338877870.jpg");
BufferedImage bi;
try {
bi = ImageIO.read(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", baos);
byte[] bytes = baos.toByteArray();
return Base64.encodeBase64String(bytes);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
static void base64StringToImage(String base64String) {
try {
byte[] bytes1 = Base64.decodeBase64(base64String);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
BufferedImage bi1 = ImageIO.read(bais);
File w2 = new File("C://templates//QQ.bmp");// 可以是jpg,png,gif格式
ImageIO.write(bi1, "jpg", w2);// 不管输出什么格式图片,此处不需改动
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 将接收的二进制流转换成图片保存
*
* @param imgByte
* 二进制流
* @param imgPath
* 图片的保存路径
* @param imgName
* 图片的名称
* @return 1:保存正常 0:保存失败
*/
public static int saveToImgByStr(byte[] imgByte, String imgPath,
String imgName) {
int stateInt = 1;
if (imgByte.length > 0) {
try {
File validateCodeFolder = new File(imgPath);
if (!validateCodeFolder.exists()) {
validateCodeFolder.mkdirs();
}
// 将字符串转换成二进制,用于显示图片
// 将上面生成的图片格式字符串 imgStr,还原成图片显示
InputStream in = new ByteArrayInputStream(imgByte);
File file = new File(imgPath, imgName);// 可以是任何图片格式.jpg,.png等
FileOutputStream fos = new FileOutputStream(file);
byte[] b = new byte[1024];
int nRead = 0;
while ((nRead = in.read(b)) != -1) {
fos.write(b, 0, nRead);
}
fos.flush();
fos.close();
in.close();
} catch (Exception e) {
stateInt = 0;
e.printStackTrace();
} finally {
}
}
return stateInt;
}
}
Java 图片转二进制及生成图片
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Image2Binary
{
public static void main(String[] args)
{
String path = "V:/test.bmp";
File file = new File(path);
FileInputStream fis;
try
{
fis = new FileInputStream(file);
byte[] b;
b = new byte[fis.available()];
StringBuilder str = new StringBuilder();// 不建议用String
fis.read(b);
for (byte bs : b)
{
str.append(Integer.toBinaryString(bs));// 转换为二进制
}
System.out.println(str);
File apple = new File("V:/test2.bmp");// 把字节数组的图片写到另一个地方
FileOutputStream fos = new FileOutputStream(apple);
fos.write(b);
fos.flush();
fos.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}