请问一张图片 怎么能实现在旁边的文本框里输入文字 文字就在图片上显示?请问这是用什么来实现的 有做过JSP在图片上动态生成文字的朋友请指教
[code="java"]
package image;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class UpdateImg {
private Font font=null;// 添加字体的属性设置
private Graphics2D g=null;
private int fontsize=0;
private int x=0;
private int y=0;
public static void main(String[] args){
UpdateImg img = new UpdateImg();
BufferedImage bufferImg = img.loadImageLocal("E:\\workspace\\gameTest\\src\\image\\1.jpg");
bufferImg = img.modifyImage(bufferImg,"帅气",100,100);
img.writeImageLocal("2.jpg",bufferImg);
}
/**
* 导入本地图片到缓冲区
*/
public BufferedImage loadImageLocal(String imgName) {
try{
return ImageIO.read(new File(imgName));
}catch(IOException e){
System.out.println(e.getMessage());
}
return null;
}
/**
* 导入网络图片到缓冲区
*/
public BufferedImage loadImageUrl(String imgName) {
try{
URL url=new URL(imgName);
return ImageIO.read(url);
}catch(IOException e){
System.out.println(e.getMessage());
}
return null;
}
/**
* 生成新图片到本地
*/
public void writeImageLocal(String newImage, BufferedImage img) {
if(newImage != null && img != null){
try{
File outputfile=new File(newImage);
ImageIO.write(img,"jpg",outputfile);
}catch(IOException e){
System.out.println(e.getMessage());
}
}
}
/**
* 设定文字的字体等
*/
public void setFont(String fontStyle, int fontSize) {
this.fontsize=fontSize;
this.font=new Font(fontStyle,Font.PLAIN,fontSize);
}
/**
* 修改图片,返回修改后的图片缓冲区(只输出一行文本)
*/
public BufferedImage modifyImage(BufferedImage img, Object content, int x, int y) {
try{
int w=img.getWidth();
int h=img.getHeight();
g=img.createGraphics();
g.setBackground(Color.WHITE);
g.setColor(Color.RED);
if(this.font != null)
g.setFont(this.font);
// 验证输出位置的纵坐标和横坐标
if(x >= h || y >= w){
this.x=h - this.fontsize + 2;
this.y=w;
}else{
this.x=x;
this.y=y;
}
java.util.Random ran=new java.util.Random();
for(int i=0; i<20;i++){
g.setColor(Color.BLACK);
int x1=ran.nextInt(w);
int y1=ran.nextInt(h);
g.drawLine(x1,y1,x1,y1);
}
if(content != null){
g.drawString(content.toString(),this.x,this.y);
}
g.dispose();
}catch(Exception e){
System.out.println(e.getMessage());
}
return img;
}
/**
* 修改图片,返回修改后的图片缓冲区(输出多个文本段) xory:true表示将内容在一行中输出;false表示将内容多行输出
*/
public BufferedImage modifyImage(BufferedImage img, Object[] contentArr, int x, int y, boolean xory) {
try{
int w=img.getWidth();
int h=img.getHeight();
g=img.createGraphics();
g.setBackground(Color.WHITE);
g.setColor(Color.RED);
if(this.font != null)
g.setFont(this.font);
// 验证输出位置的纵坐标和横坐标
if(x >= h || y >= w){
this.x=h - this.fontsize + 2;
this.y=w;
}else{
this.x=x;
this.y=y;
}
if(contentArr != null){
int arrlen=contentArr.length;
if(xory){
for(int i=0; i < arrlen; i++){
g.drawString(contentArr[i].toString(),this.x,this.y);
this.x+=contentArr[i].toString().length() * this.fontsize / 2 + 5;// 重新计算文本输出位置
}
}else{
for(int i=0; i < arrlen; i++){
g.drawString(contentArr[i].toString(),this.x,this.y);
this.y+=this.fontsize + 2;// 重新计算文本输出位置
}
}
}
g.dispose();
}catch(Exception e){
System.out.println(e.getMessage());
}
return img;
}
}
[/code]
这是直接把文字写在图片上,如果你要动态往图片上写的话,增加个AJAX应该就行了!
想在图片上写字是不太可能的,你这里是前台页面,这样做更没有必要.
碰到这样的情况,一般会采用DIV覆盖来实现,用一个大小和图片一样的DIV覆盖在图片之上,通过样式表设置DIV为透明,将文字放入这个DIV中就行了。
这样做是最简单的了..