求助,帮我用JAVA语言写一个字节转换成图片的方法,返回图片类型
我直接把做验证码的代码发出来了。如果你不是要做验证码。那你自己看下就知道你问题的答案了。
//清空浏览器缓存。确保验证图片更换
response.setHeader(“Cache-Control”,”no-cache”);
response.setHeader(“Pragma”, “no-cache”);
response.setDateHeader(“Expires”, -1);
//以图片形式打开数据
response.setHeader(“Content-Type”,”image/jpeg”);
//response.setContentType(“image/jpeg”);
//在内存中创建一副图片
BufferedImage image=new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB);
//在图片上写数据
Graphics g=image.getGraphics();
g.setColor(Color.black);
//画个宽为80.、高30的实心矩形刚好将图片遮盖
g.fillRect(0, 0, 80, 30);
//设置图片上字体的颜色及格式
g.setColor(Color.red);
g.setFont(new Font(“宋体”,Font.BOLD,20));
//将字体写入图片
String num=makeNum();
//将字串保存到session中
request.getSession().setAttribute(“checkcode”, num);
//写字符串。坐标是从基线为准。
g.drawString(num, 0, 20);
//将图片输出给浏览器。参数分别为要写入的 RenderedImage。 包含格式非正式名称的 String。 将在其中写入数据的 OutputStream。
ImageIO.write(image, “jpg”,response.getOutputStream());
}
public String makeNum(){
Random r=new Random();
String num=r.nextInt(10000000)+””;
StringBuffer stringBuffer=new StringBuffer();
for (int i = 0; i 7-num.length(); i++) {
stringBuffer.append(“0”);
}
num=stringBuffer.toString()+num;
return num;
}
java 16进制字符串转图片
String src=…; //从数据库取得的字符串
String output=…; //定义一个输出流用来保存图片
try{
FileOutputStream out = new FileOutputStream(new File(output));
byte[] bytes = src.getBytes();
for(int i=0;i bytes.length;i+=2){
out.write(charToInt(bytes[i])*16+charToInt(bytes[i+1]));
}
out.close();
}catch(Exception e){
e.printStackTrace();
}
java文本文件转化为图片文件怎么弄?
文件在计算机中都是以二进制保存的,但系统是以文件头来区分各种文件格式的。
也就是说,仅仅更改后缀名是不行的。
按照你说想的,可以这么来做:
1、读取txt文本的每一行
2、创建BufferedImage图片,然后在图片上画读取到的文本
下面给出示例程序:
测试类 TextToImageExample.java
import java.io.File;
import java.util.Scanner;
/**
* 文本转图片测试类
* @author YY2924 2014/11/18
* @version 1.0
*/
public class TextToImageExample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print(“输入TXT文本名称 (例如: D:/java.txt ):”);
String textFileName = in.nextLine();
System.out.print(“输入保存的图片名称 (例如: D:/java.jpg):”);
String imageFileName = in.nextLine();
TextToImage convert = new TextToImage(new File(textFileName), new File(imageFileName));
boolean success = convert.convert();
System.out.println(“文本转图片:” + (success ? “成功” : “失败”));
}
}
文本转图片类 TextToImage.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
/**
* 文本转图片类
* @author YY2924 2014/11/18
* @version 1.0
*/
public class TextToImage {
/** 文本文件 */
private File textFile;
/** 图片文件 */
private File imageFile;
/** 图片 */
private BufferedImage image;
/** 图片宽度 */
private final int IMAGE_WIDTH = 400;
/** 图片高度 */
private final int IMAGE_HEIGHT = 600;
/** 图片类型 */
private final int IMAGE_TYPE = BufferedImage.TYPE_INT_RGB;
/**
* 构造函数
* @param textFile 文本文件
* @param imageFile 图片文件
*/
public TextToImage(File textFile,File imageFile){
this.textFile = textFile;
this.imageFile = imageFile;
this.image = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_TYPE);
}
/**
* 将文本文件里文字,写入到图片中保存
* @return boolean true,写入成功;false,写入失败
*/
public boolean convert() {
//读取文本文件
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(textFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
//获取图像上下文
Graphics g = createGraphics(image);
String line;
//图片中文本行高
final int Y_LINEHEIGHT = 15;
int lineNum = 1;
try {
while((line = reader.readLine()) != null){
g.drawString(line, 0, lineNum * Y_LINEHEIGHT);
lineNum++;
}
g.dispose();
//保存为jpg图片
FileOutputStream fos = new FileOutputStream(imageFile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(image);
fos.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 获取到图像上下文
* @param image 图片
* @return Graphics
*/
private Graphics createGraphics(BufferedImage image){
Graphics g = image.createGraphics();
g.setColor(Color.WHITE); //设置背景色
g.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);//绘制背景
g.setColor(Color.BLACK); //设置前景色
g.setFont(new Font(“微软雅黑”, Font.PLAIN, 12)); //设置字体
return g;
}
}
特别注意:程序中使用到了com.sun.image.codec.jpeg.JPEGImageEncoder和 com.sun.image.codec.jpeg.JPEGCodec ,这 两个是sun的专用API,Eclipse会报错。
解决办法:
Eclipse软件,Windows-Preferences-Java-Complicer-Errors/Warnings,Deprecated and restricted API-Forbidden reference 改为 Warnning。
如果还是报错,在工程上build path,先移除JRE System Library,然后再添加JRE System Library。
java如何将连续的字节数据转成图片数据?
java是可以将图片字节转成图片的,但是你需要知道接受的数据对应一个图片有多长,可以在每个图片数据包前面加上此次图片的长度,按长度截取字节,转成图片,或者直接将字节转成视频,毕竟你是连续的图像
java怎么把16进制的串另存为图片?
public class Hex2Image {
public static void main(String[] args) throws Exception {
Hex2Image to=new Hex2Image();
InputStream is=new FileInputStream(“c:/work/today.txt”);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String str = null;
StringBuilder sb = new StringBuilder();
while ((str = br.readLine()) != null) {
System.out.println(str);
sb.append(str);
}
to.saveToImgFile(sb.toString().toUpperCase(),”c:/work/dd.jpg”);
}
public void saveToImgFile(String src,String output){
if(src==null||src.length()==0){
return;
}
try{
FileOutputStream out = new FileOutputStream(new File(output));
byte[] bytes = src.getBytes();
for(int i=0;i bytes.length;i+=2){
out.write(charToInt(bytes[i])*16+charToInt(bytes[i+1]));
}
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
private int charToInt(byte ch){
int val = 0;
if(ch=0x30ch=0x39){
val=ch-0x30;
}else if(ch=0x41ch=0x46){
val=ch-0x41+10;
}
return val;
}
}