backtosong 2009-04-06 09:37
浏览 261
已采纳

关于jsp动态在图片上生成文字

请问一张图片 怎么能实现在旁边的文本框里输入文字 文字就在图片上显示?请问这是用什么来实现的 有做过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应该就行了!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题