java 在图片上写字,两个图片合并的实现方法

实例如下:

package writeimg;
import javax.imageio.ImageIO;
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; 

public class pic { 

  private Font font = new Font("华文彩云", Font.PLAIN, 40);// 添加字体的属性设置 

  private Graphics2D g = null; 

  private int fontsize = 0; 

  private int x = 0; 

  private int y = 0; 

  /**
   * 导入本地图片到缓冲区
   */
  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.orange);//设置字体颜色
      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 (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;
  } 

  /**
   * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
   *
   * 时间:2007-10-8
   *
   * @param img
   * @return
   */
  public BufferedImage modifyImageYe(BufferedImage img) { 

    try {
      int w = img.getWidth();
      int h = img.getHeight();
      g = img.createGraphics();
      g.setBackground(Color.WHITE);
      g.setColor(Color.blue);//设置字体颜色
      if (this.font != null)
        g.setFont(this.font);
      g.drawString("reyo.cn", w - 85, h - 5);
      g.dispose();
    } catch (Exception e) {
      System.out.println(e.getMessage());
    } 

    return img;
  } 

  public BufferedImage modifyImagetogeter(BufferedImage b, BufferedImage d) { 

    try {
      int w = b.getWidth();
      int h = b.getHeight(); 

      g = d.createGraphics();
      g.drawImage(b, 100, 10, w, h, null);
      g.dispose();
    } catch (Exception e) {
      System.out.println(e.getMessage());
    } 

    return d;
  } 

  public static void main(String[] args) { 

    pic tt = new pic(); 

    BufferedImage d = tt.loadImageLocal("D:\\11.jpg");
//   BufferedImage b = tt
//       .loadImageLocal("E:\\文件(word,excel,pdf,ppt.txt)\\zte-logo.png");
     tt.writeImageLocal("D:\\cc.jpg",tt.modifyImage(d,"西昌苹果",90,90)
    //往图片上写文件
     ); 

    //tt.writeImageLocal("D:\\cc.jpg", tt.modifyImagetogeter(b, d));
    //将多张图片合在一起
    System.out.println("success");
  } 

}

以上就是小编为大家带来的java 在图片上写字,两个图片合并的实现方法全部内容了,希望大家多多支持我们~

(0)

相关推荐

  • Java实现多个文档合并输出到一个文档

    本文实例为大家分享了Java实现多个文档合并输出到一个文档的具体代码,供大家参考,具体内容如下 方法:Java NIO package First; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; import java.nio.channels.WritableByteChannel; publi

  • java 流操作对文件的分割和合并的实例详解

    java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代码: package com.dufy.file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.SequenceInputStream; import java.ut

  • java实现大文件分割与合并的实例代码

    复制代码 代码如下: package com.test; import java.io.BufferedReader;  import java.io.BufferedWriter;  import java.io.FileNotFoundException;  import java.io.FileReader;  import java.io.FileWriter;  import java.io.IOException;  import java.util.Collections;  im

  • java 实现切割文件和合并文件的功能

    java 实现切割文件和合并文件的功能 一.切割文件代码如下: 需求:将一个媒体文件切割成多个碎片(每个碎片的大小为1M),并添加配置说明文件 1.创建(指定)一个文件夹,用于保存切割出来的碎片           2.创建源文件对象,并传入一个输入流对象           3.创建一个缓冲区为1M           4.创建一个输入流对象并将源文件对象传入,创建一个输出流对象引用           5.每个缓冲区获取到碎片时,使用输出对应流对象写入到一个新的文件           6.

  • java文件操作工具类实现复制文件和文件合并

    两个方法:1.复制一个目录下面的所有文件和文件夹2.将一个文件目录下面的所有文本文件合并到同一个文件中 复制代码 代码如下: package com.firewolf.test; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException; public class FileReaderUtil { public static void

  • java实现合并2个文件中的内容到新文件中

    编写一个程序 将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中 a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔. 复制代码 代码如下: package javase.arithmetic; import com.google.common.base.Charsets; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.

  • Java实现文件分割和文件合并实例

    文件切割和文件合并这个问题困扰了我有一段时间了(超过一天没做粗来). 找了好多博客,本来想转载一个来的 结果找不到了.很无奈. 只好自己贴代码上了. 当然我会尽力好好写注释的. 文件切割器: import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Scanner; public c

  • java 在图片上写字,两个图片合并的实现方法

    实例如下: package writeimg; import javax.imageio.ImageIO; 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; public class pic

  • java 使用Graphics2D在图片上写字

    目录 使用Graphics2D在图片上写字 Graphics2D 的使用 1.Graphics2D和Graphics的区别 2.setRenderingHint的具体用处 3.Stroke的使用方法 使用Graphics2D在图片上写字 首先jsp页面:src是一个方法地址 然后在Controller如下:写一个生成方法,用流进行读写 生成方法,(关键): 注意:这种方法可行,但是需要计算文字的位置,感觉不太灵活,如果谁有更好的方法请分享一下. Graphics2D 的使用 1.Graphics

  • Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】

    本文实例讲述了Java实现的上传并压缩图片功能.分享给大家供大家参考,具体如下: 先看效果: 原图:1.33M 处理后:27.4kb 关键代码: package codeGenerate.util; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.Fil

  • Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解

    本文实例讲述了Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能.分享给大家供大家参考,具体如下: 公司要写一些为自身业务量身定制的的组件,要基于Vue,写完后扩展了一下功能,选择写图片上传是因为自己之前一直对这个功能比较迷糊,所以这次好好了解了一下.演示在网址打开后的show.gif中. 使用技术:Vue.js | node.js | express | MongoDB. github网址:https://github.com/neroneroffy/privat

  • 微信小程序图片上传组件实现图片拖拽排序

    目录 引言 首先来看效果 组件设计 使用方式 总结 引言 图片上传组件是一个组件库目前来看必不可少的功能了.笔者近日给自己开源的toy工具库也添加了这一功能.相比原生和大部分组件库来说,它不仅支持长按提示删除,还能够支持图片的拖拽排序,很是nice! (也是为了毕设时身边同学能够更快上手小程序,更加将中心侧重于逻辑和设计) 本文我将继续介绍组件的设计思路: 首先来看效果 对于组件内部来说.笔者提供了一个参数去让开发者决定是否应该在场景中支持拖动排序.这里略去这些无关代码. 拖拽排序功能使用了微信

  • jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】

    本文实例讲述了jQuery实现鼠标滑过商品小图片上显示对应大图片功能.分享给大家供大家参考,具体如下: 1 . 效果截图 2 . 代码 <!doctype html> <html> <head> <meta charset="utf-8"> <title>www.jb51.net jQuery图片变换</title> </head> <style type="text/css"

  • 浅谈Java中浮点型数据保留两位小数的四种方法

    目录 一.String类的方式 二.DecimalFormat类 三.BigDecimal类进行数据处理 四.NumberFormat类进行数据处理 总结一下 今天在进行开发的过程中遇到了一个小问题,是关于如何将double类型的数据保留两位小数.突然发现这方面有一点欠缺,就来总结一下. 一.String类的方式 该方式是是使用String的format()方法来实现的,该方法的作用就是规范数据的格式,第一个参数传入一个字符串来表示输出的数据格式,如保留两位小数就使用"%.2f",第二

  • java实现文件上传下载和图片压缩代码示例

    分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:) 复制代码 代码如下: package com.eabax.plugin.yundada.utils; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.

  • FCKeditor编辑器添加图片上传功能及图片路径问题解决方法

    现在很多CMS系统因为安全原因会把后台编辑器里的上传功能给去除,但这样一来对实际使用过程造成了很多麻烦,今天我们以ASPCMS系统的FCKeditor编辑器为例,说明一下如何增加图片上传功能. 1. 打开网站后台编辑器里的admin/editor/fckconfig.js这个文件 找到FCKConfig.ImageUpload = false 这句,把false改成true就行啦. FCKConfig.ImageBrowser = false ; 这里也同样把false改成true 2. 看一下

  • 水晶报表图片不显示两种问题分析及解决方法

    水晶报表布置后里面的图片不显示的情况,分两种: 一是:水晶报表工具栏上的图片不显示: 二是:水晶报表中的的图片对象不显示: 针对第一种情况的解决方法: 对于工具栏上的图片不显示是由于发布的服务器上,水晶报表所需要的站点相关图片样式 没有找到. 在水晶报表图片不显示的页面上,看页面的源代码.可在<head></head>之间找到 复制代码 代码如下: </head> <link href="/aspnet_client/System_Web/2_0_507

随机推荐