`

JAVA实现在图片上写文字

阅读更多

功能:直接在一张已有的图片上写字,可指定文字颜色。
           如果背景图片是空,生成一张白图片,根据文本信息,来决定图片的长度和宽度。

package pictures;

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.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import javax.imageio.ImageIO;

public class Draw {
     private static Font mFont = new Font("宋体",Font.PLAIN,20);

    public static void main(String[] args) {

        File f1 = new File("C:\\Documents and Settings\\xugang\\桌面\\t.txt");
        File f2 = new File("C:\\Documents and Settings\\xugang\\桌面\\testPictrue.JPEG");
        File f3 = new File("C:\\Documents and Settings\\xugang\\桌面\\1.jpg");
        draw2(f1,f2,f3,true);
        
    }
    
    //直接在一张已有的图片上写字,可指定文字颜色。如果背景图片参数为空或者"",则写张白图
    public static void draw2( File content , File outPictrue , File background , boolean b ){
         FileReader f = null ;
            try {
                f = new FileReader(content);
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }
                BufferedReader br = new BufferedReader(f);
                String line = "";

                int lineNum = 0 ;    //一共有多少行
                List<String> list = new ArrayList<String>();
                try {
                    while( (line = br.readLine()) != null){
                        System.out.println(line);
                        list.add(line);
                        ++lineNum;
                    }
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                
                int[] iArray = new int[list.size()];
                int length = list.size();
                for(int k = 0 ; k < length ; k++){
                    iArray[k] = format1(list.get(k));
                }
                Arrays.sort(iArray);
                int lineLength = iArray[length-1];
                System.out.println("文本中最长的一行的长度是:"+lineLength);
                System.out.println("一共的行数是:"+lineNum);
                BufferedImage image = null;
                if( background.equals("") || background == null){
                    double h = 256/16;
                    double w = 85/10;
                    int width=(int) (w*lineLength)+ 40 , height=(int) (h*lineNum);
                    image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
                }else{
                    try {
                        image = ImageIO.read(background);
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
                Graphics g = image.getGraphics();
//                g.setColor(getRandColor(200,250));
//                g.fillRect(1, 1, width-1, height-1);
                if( b == false){
                g.setColor(new Color(102,102,102));  //设字体为黑色,否则就是白色
                }
//                g.drawRect(0, 0, width-1, height-1);
                g.setFont(mFont);
                int k = 0;
                Iterator<String> it = list.iterator();
                while(it.hasNext()){
                    g.drawString(it.next(), 30, 15 + 20*k);
                    ++k;
                }
                try {
                    ImageIO.write(image, "JPEG", outPictrue);
                } catch (IOException e) {
                    e.printStackTrace();
                }
    }
   
    //返回占位符的长度。
     public static int format1( String s){
            int length = 0 ;
            for(int t = 0; t < s.length() ; t++){
                if( s.charAt(t)> 255){
                    length = length + 2;
                }else{
                    length = length + 1 ;
                }
            }
            System.out.println(length);
            return length;
     }
     //生成一张白图片,根据文本信息,来决定图片的长度和宽度。
     //缺点:字体不同,字体样式不同,都会影响整个图片。
     public static void draw1(){
         FileReader f = null ;
        try {
            f = new FileReader("C:\\Documents and Settings\\xugang\\桌面\\t.txt");
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
            BufferedReader br = new BufferedReader(f);
            String line = "";

            int lineNum = 0 ;    //一共有多少行
            List<String> list = new ArrayList<String>();
            try {
                while( (line = br.readLine()) != null){
                    System.out.println(line);
                    list.add(line);
                    ++lineNum;
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            
            int[] iArray = new int[list.size()];
            int length = list.size();
            for(int k = 0 ; k < length ; k++){
                iArray[k] = format1(list.get(k));
            }
            Arrays.sort(iArray);
            int lineLength = iArray[length-1];
            System.out.println("文本中最长的一行的长度是:"+lineLength);
            System.out.println("一共的行数是:"+lineNum);
            
            double h = 256/16;
            double w = 85/10;
            int width=(int) (w*lineLength)+ 40 , height=(int) (h*lineNum);
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = image.getGraphics();
//            g.setColor(getRandColor(200,250));
            g.fillRect(1, 1, width-1, height-1);
            g.setColor(new Color(102,102,102));
            g.drawRect(0, 0, width-1, height-1);
            g.setFont(mFont);
            int k = 0;
            Iterator<String> it = list.iterator();
            while(it.hasNext()){
                g.drawString(it.next(), 30, 15+15*k);
                ++k;
            }
            try {
                ImageIO.write(image, "JPEG", new File("C:\\Documents and Settings\\xugang\\桌面\\testPictrue.JPEG"));
            } catch (IOException e) {
                e.printStackTrace();
            }
     }
}

分享到:
评论

相关推荐

    Java编写的图片上加文字Demo

    这个"Java编写的图片上加文字Demo"项目利用Eclipse 4.2.1作为开发环境,实现了在本地图片上动态添加文字的功能,允许用户自定义字体样式,从而制作出具有个性化的水印。下面我们将深入探讨这一技术实现的关键知识点...

    java实现在图片中写字

    在Java编程语言中,实现将文字写入图片是一项常见的任务,尤其在图形用户界面(GUI)开发、数据可视化或图像处理应用中。本教程将详细解释如何使用Java来完成这一功能,主要涉及到Java的`java.awt`和`javax.imageio`...

    JAVA实现给图片增加图片水印或者文字水印-依赖包

    在Java编程中,给图片添加水印是一项常见的需求,无论是为了版权保护还是...但以上代码已经足够作为基础,帮助你开始在Java中实现图片加水印的功能。记得在运行此代码前,确保已经正确引入了Apache Commons Imaging库。

    java实现图片上传并添加水印效果(文字水印,蒙版,logo图片),自动进行文字大小行数位置匹配 ,文字自动换行

    在Java编程中,实现图片上传并添加水印效果是一项常见的任务,这通常涉及到图像处理、图形用户界面(GUI)和文件I/O等多个方面。在这个项目中,我们将关注以下几个关键知识点: 1. **Java图像处理库**:Java标准库...

    采用java实现图片水印

    在IT行业中,图片水印是一种常见的技术...在提供的压缩包文件"WaterMark"中,可能包含一个或多个示例代码,用于演示如何使用Java实现图片水印。这些代码可以作为学习和参考的资源,帮助你更好地理解和应用上述知识点。

    Java实现在图片上添加水印图片和水印文字.doc

    Java 实现图片添加水印图片和水印文字 Java 是一种广泛应用于企业级开发的编程语言,拥有强大灵活的图形处理能力。本文将详细介绍如何使用 Java 实现图片添加水印图片和水印文字,并对代码进行解释。 图片添加水印...

    KNN实现手写识别汉字-基于JAVA,

    基于java实现的手写识别软件,字库是特征点字库,通过KNN算法计算,汉字的特征点通过递归方法得到,核心代码量300行左右,识别效果良好。直接使用eclipse导入工程即可,单击startframe.java开始运行

    java手写识别超级准确

    Java手写识别技术是一种在Java平台上实现的图像处理与机器学习技术,主要用于识别手写数字或字符。在本项目中,"java手写识别超级准确" 提示我们这是一个高效的识别系统,具有高度的准确率,并且它采用了Swing库来...

    java实现提取图片文字信息并生成表格

    对图片进行水印处理,利用TESS4J识别图片并提取信息生成excel表格。里面有字库文件所以占用空间较大。 说明:https://blog.csdn.net/xlantian/article/details/80789115

    java实现word表格指定位置盖章,并且设置印章悬浮于文字之上

    在Java编程环境中,实现Word文档中的表格指定位置盖章,并让印章悬浮于文字之上,是一项技术挑战,但可以通过一些库和技巧来实现。这个过程主要涉及到对Word文档内容的读取、修改以及重新保存,同时要确保印章图像不...

    javacv对图片进行文字提取,定位指定文字在图片的位置坐标,提高识别速度

    在这个特定的应用场景中,我们利用 JavaCV 对图片进行文字识别(OCR,Optical Character Recognition),以定位并提取指定文字在图片中的位置坐标,同时优化识别速度。 首先,我们需要了解 OCR 的基本概念。OCR ...

    java实现word表格指定位置盖章,并且设置章悬浮于文字之上

    在Java开发中,实现Word表格指定位置盖章并设置章悬浮于文字之上,涉及到的技术主要包括Apache POI库的使用、图像处理以及Word文档对象模型的理解。Apache POI是Java中用于处理Microsoft Office格式文件(如DOCX)的...

    java实现在pdf模板的指定位置插入图片

    Java实现PDF模板指定位置插入图片 Java语言是当今最流行的编程语言之一,对于PDF文档的处理有着非常广泛的应用。本文将详细介绍如何使用Java语言在PDF模板的指定位置插入图片,实现对PDF文档的自定义和编辑。 ...

    Java实现点击文字验证码与拖动/滑动图片验证码(源码+demo+单元测试+实现思路)

    3.1.JAVA掌握AWT的BufferedImage、Graphics2D、Font;Redis;图片生成随机位置 随机中文文字、随机抠图、拼图都只需要用到BufferedImage和Graphics2D。 3.2.前端熟悉点击事件,根据点击事件的坐标位置、图片的位置...

    Java实现ocr图片识别(PaddleOCR)飞桨

    通过以上步骤,我们可以成功地在Java SpringBoot应用中集成PaddleOCR,实现高效、便捷的OCR图片识别服务。这种集成方式不仅充分利用了PaddleOCR的强大功能,也发挥了Java在后端服务上的稳定性和易用性,为开发者提供...

    java实现word表格指定位置盖印,并且设置印悬浮于文字之上,达到跟用实体印在A4纸上盖印一样的效果

    在Java编程环境中,实现Word表格指定位置盖印并设置印章悬浮于文字之上,涉及到的技术主要包括Apache POI库的使用、图像处理以及Word文档的操作。Apache POI是Java中广泛使用的微软Office文档处理库,它允许开发者...

    java文字转图片

    在文字转图片的过程中,`Graphics2D`是关键工具,可以让我们在指定的图像上绘制文字,调整字体、颜色、大小和位置。 2. **BufferedImage** `BufferedImage`是Java中的一个图像处理类,用于创建和操作图像。在文字...

    用Java给图片添加文字或图像水印

    在本文中,我们将深入探讨如何使用Java编程语言为图片添加文字或图像水印。这个话题源于一个名为"Java水印.rar"的压缩包文件,它包含了一段Java源代码,用于实现这一功能。该压缩包有四个文件:RunIt.bat(运行脚本...

    java图片上添加文字代码.rar

    在Java编程语言中,处理图像是一项常见的任务,特别...如果你需要在Java项目中实现图片加文字的功能,可以参考上述代码,并根据实际需求进行调整。当然,解压并研究"JavaImage"文件会提供更具体的实现细节和代码示例。

    JAVA WORD中实现电子印章效果 文字浮于印章上面

    在JAVA中实现Word文档中的电子印章效果,可以让文档看起来更加正式和权威,尤其适用于法律、合同等场景。这个过程涉及到的主要技术包括Java编程语言、Apache POI库以及可能的图像处理技术。Apache POI是一个流行的...

Global site tag (gtag.js) - Google Analytics