我的需求是:在照片下方加上照片描述.

思路:

1,先创建与照片宽度一样的白底图片,

2,在图片上写上对应照片的描述.

3.创建的白底图片与照片合成一张图片

一:创建图片

package tuPian;import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;import javax.imageio.ImageIO;public class DrawPic {public static void main(String[] args) throws IOException {//照片的路径String bigImg = "C:\\Users\\sclf\\Desktop\\开发临时文档\\任务状态\\正在开发\\新建文件夹\\";File SJfile = new File(bigImg);File[] listFiles = SJfile.listFiles();//绘图.for (File ffile : listFiles) {int width = getImgWidth(ffile);//获取照片的宽度int height = 60;//描述的高度自己定义String substring = ffile.toString().substring(bigImg.length());/** 正则表达式获取图片的名字.*    当然你的名字如果不是  中文名+.jpg 用我这个正则表达式 是不生效的.需要你自己处理你的名字* */String re = "[r'-?/.jpg']";String name = substring.replaceAll(re, "");//设置图片的高度与宽度.BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);//创建出来的图片存储的路径final File file = new File("C:\\Users\\sclf\\Desktop\\开发临时文档\\任务状态\\正在开发\\描述图片\\"+name+".jpg");if(file.exists()) {file.delete();file.createNewFile();}writeImage(bi, "jpg", file,width,height);}System.out.println("绘图成功");}/** 通过指定参数写一个图片  */public static boolean writeImage(BufferedImage bi, String picType, File file,int width,int height) {Graphics g = bi.createGraphics();
//设置底片的颜色Color color = new Color(255,255,255);g.setColor(color);
//底片的宽高为多少.如果不写宽高你的图片创建出来是黑色的g.fillRect(0, 0, width, height);g.dispose();bi.flush();boolean val = false;try {val = ImageIO.write(bi, picType, file);} catch (IOException e) {e.printStackTrace();}return val;}/*** 获取图片宽度* @param file  图片文件* @return 宽度*/public static int getImgWidth(File file) {InputStream is = null;BufferedImage src = null;int ret = -1;try {is = new FileInputStream(file);src = javax.imageio.ImageIO.read(is);ret = src.getWidth(null); // 得到源图宽is.close();} catch (Exception e) {e.printStackTrace();}return ret;}}

二:图片上写文字/或者 图片上插入图片

package tuPian;import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.text.ParseException;public class aa2 {public static void main(String[] args) throws ParseException {try {String content = null;String outPath = null;String bigImg = "C:\\Users\\sclf\\Desktop\\开发临时文档\\任务状态\\正在开发\\描述图片\\";File SJfile = new File(bigImg);File[] listFiles = SJfile.listFiles();for (File file : listFiles) {System.out.println(file);int imgWidth = getImgWidth(file);int imgHeight =45; //图片的高度.我给固定死了,你们随意变 String substring = file.toString().substring(bigImg.length());String re = "[r'-?/.jpg']";String name = substring.replaceAll(re, "");//图片上需要写的内容content = "院士肖像来源于国家出版基金项目 院士风采-中国工程院院士数字影像集";//图片需要保存的位置outPath = "C:\\Users\\sclf\\Desktop\\开发临时文档\\任务状态\\正在开发\\完整的描述\\" + name + ".jpg";/** 第一个参数:String类型的图片路径* 第二个参数:在图片上插入的图片--------------不用本功能传null就行* 第三个参数:你要在图片上插入图片的 x 坐标(x,y)* 第四个参数:你要在图片上插入图片的 y 坐标(x,y)* 第五个参数:在图片上插入文本内容--------------不用本功能传null就行* 第六个参数:你要在图片上插入图片的 x 坐标(x,y)* 第七个参数:你要在图片上插入图片的 y 坐标(x,y)* 第八个参数:需要把图片保存的路径*/bigImgAddSmallImgAndText(file.toString(), null, 222, 222, content, imgWidth / 12, imgHeight, outPath);}} catch (IOException e) {e.printStackTrace();}}/**** 在一张大图张添加小图和文字* * @param bigImgPath*            大图的路径* @param smallImgPath*            小图的路径* @param sx*            小图在大图上x抽位置* @param sy*            小图在大图上y抽位置* @param content*            文字内容* @param cx*            文字在大图上y抽位置* @param cy*            文字在大图上y抽位置* @param outPathWithFileName*            结果输出路径*/public static void bigImgAddSmallImgAndText(String bigImgPath, String smallImgPath, int sx, int sy, String content,int cx, int cy, String outPathWithFileName) throws IOException {// 主图片的路径InputStream is = new FileInputStream(bigImgPath);// 通过JPEG图象流创建JPEG数据流解码器JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);// 解码当前JPEG数据流,返回BufferedImage对象BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();// 得到画笔对象Graphics g = buffImg.getGraphics();// 小图片的路径if (smallImgPath != null) {ImageIcon imgIcon = new ImageIcon(smallImgPath);// 得到Image对象。Image img = imgIcon.getImage();// 将小图片绘到大图片上,5,300 .表示你的小图片在大图片上的位置。g.drawImage(img, sx, sy, null);// 设置颜色。g.setColor(Color.WHITE);}
//              院士肖像来源于国家出版基金项目 院士风采-中国工程院院士数字影像集// 最后一个参数用来设置字体的大小if (content != null) {Font f = new Font("微软雅黑", Font.PLAIN, 24);Color mycolor = Color.black;g.setColor(mycolor);g.setFont(f);g.drawString(content, cx, cy); // 表示这段文字在图片上的位置(cx,cy) .第一个是你设置的内容。}g.dispose();OutputStream os = new FileOutputStream(outPathWithFileName);// 创键编码器,用于编码内存中的图象数据。JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);en.encode(buffImg);is.close();os.close();}/*** 获取图片宽度* @param file  图片文件* @return 宽度*/public static int getImgWidth(File file) {InputStream is = null;BufferedImage src = null;int ret = -1;try {is = new FileInputStream(file);src = javax.imageio.ImageIO.read(is);ret = src.getWidth(null); // 得到源图宽is.close();} catch (Exception e) {e.printStackTrace();}return ret;}/*** 获取图片宽度* @param file  图片文件* @return 高度*/public static int getImgHeight(File file) {InputStream is = null;BufferedImage src = null;int ret = -1;try {is = new FileInputStream(file);src = javax.imageio.ImageIO.read(is);ret = src.getHeight();// 得到源图宽is.close();} catch (Exception e) {e.printStackTrace();}return ret;}}

三:图片合成

点击下边连接.已经写过一片图片合成的文章.参考以下连接

https://mp.csdn.net/postedit/88949769

java 创建新的图片,底色自己设定相关推荐

  1. java 创建新文件_Java创建新文件

    创建文件是一种非常常见的IO操作,在这一小节中我们将学习如何在java中创建文件的几个方法. 在java中创建文件有三种流行的方法,下面将一个一个地来学习. 方法一:使用File.createNewF ...

  2. java 创建新文件

    文章目录 前言 一.方法一:使用File.createNewFile()方法 二.使用FileOutputStream.write(byte[] b)方法 三.使用Java NIO Files.wri ...

  3. java生成和读取keystore_java-如何以编程方式创建新的KeyStore?

    java-如何以编程方式创建新的KeyStore? 我正在尝试以编程方式在Java中创建新的密钥库. 如下代码: KeyStore keyStore = KeyStore.getInstance(Ke ...

  4. 【幻灯片动画制作软件】Focusky教程 | 用图片创建新工程

    Focusky 动画演示大师(以下简称为"FS软件")为您提供4种方式创建新工程,包括, 创建空白项目,打开新的在线模板,导入已有的PPT创建新工程,或者用一种全新的方法创建新工程 ...

  5. java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量

    转载自  java 程序实现对图片的压缩生成缩略图并可设定长宽.尺寸压缩率.图片质量 之前是在另一位高手的上传内容中学习到的,并将其代码根据我的需求进行了修改,参考位置:http://jiangpin ...

  6. Java多线程01:创建新的执行线程

    ⭕️前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(点击跳转到网站)⭕️ 创建新的执行线程(thread.Runnable) 核心概念 线程就是独立的执行路径 在程序 ...

  7. 用Java弹出创建新的消息通知

    首先创建JFrame作为弹出窗口. 在其中添加一些JLabel以包含信息,并在适当的位置分配它们,使其看起来像一条通知消息. 下面给出了示例代码: String message = 'You got ...

  8. IntelliJ IDEA for Mac 如何在当前的普通Java项目中创建新的模块/添加模块/创建模块

    文章目录 添加模块的入口 创建新的项目模块 添加模块的入口 添加新的模块的入口有两个,如下图所示: 第一种方式,[File] --> [New] --> [Module]: 第二种方式,打 ...

  9. JNI中创建新的线程回调java方法的技巧

    在实际项目中,经常需要在Native层创建新的线程处理一些耗时操作,然后将结果回调给java层.如果按照普通的方式,直接获取MethodID,然后新线程中调用CallxxxMethod(),这样肯定是 ...

最新文章

  1. Python十大装腔语法
  2. 一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种?请用递归算法编程实现。...
  3. springboot整合mybatis分页插件
  4. Linux下LAMP环境的安装之编译安装过程(五)
  5. 项目中使用completablefuture_“工业冷冻用中大型冷盐水机组使用R290替代R22项目”通过验收...
  6. MapReduce进阶:多路径输入输出
  7. HBase Shell 基本操作
  8. Java 比较两个版本号的大小 (通用)
  9. 【渝粤题库】国家开放大学2021春4010渠道管理题目
  10. 四位数码管秒表 c语言编程,4位共阴极数码管秒表设计仿真与程序
  11. springMVC后台验证信息不显示的原因初探
  12. activiti表单设计器_基于Vue,ElementUI开发的一款表单设计器
  13. A.1.3-控制台输入,类型转换(int.Parse()),格式化输出
  14. 计算机管理找不到指定模块,卸载时找不到指定模块怎么办_电脑卸载找不到指定模块处理方法-win7之家...
  15. 计算复杂数学表达式的值
  16. Android 如何抓取开机Log
  17. 王家林 大数据Spark超经典视频链接全集[转]
  18. 微信小程序实现天气预报功能(附源码)
  19. ESP-MQTT-AT指令连接阿里云物联网平台
  20. MySQL之连接原理

热门文章

  1. LiveNVR传统安防摄像机互联网直播-二次开发相关的API接口
  2. 二、java项目常用工具类之beancopy,bean和map转换工具类
  3. 数据探查平台-元数据对标专利 -- 普帝
  4. 猜数字游戏java课程设计报告
  5. MIT JOS lab2内存管理实验记录
  6. 箱体图Boxplot及Python绘制方法
  7. 计算机系统能及时处理过程,在( )操作系控制下,计算机系统能及时处理由过程控制反馈的数据并做出响应。...
  8. 郑和下西洋有两个主要目的:
  9. 版权问题某些资源无法下载
  10. 【渗透笔记】友情检测朋友公司并拿下shell过程