请问一张图片 怎么能实现在旁边的文本框里输入文字 文字就在图片上显示?请问这是用什么来实现的 有做过JSP在图片上动态生成文字的朋友请指教
2条回答 默认 最新
- koyrenny 2009-04-08 16:08关注
[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应该就行了!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能
- ¥15 jmeter脚本回放有的是对的有的是错的
- ¥15 r语言蛋白组学相关问题