java盒图_java合成图片

package com.pbids.sanqin.util;

import javax.imageio.ImageIO;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.net.URL;

public class PicUtil {

private Font font = new Font("宋体", Font.PLAIN, 12); // 添加字体的属性设置

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, "png", 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("www.hi.baidu.com?xia_mingjian", w - 85, h - 5);

g.dispose();

} catch (Exception e) {

System.out.println(e.getMessage());

}

return img;

}

/**

* 合成图片

* @param addImage

* @param originalImage

* @return

*/

public BufferedImage modifyImagetogeter(BufferedImage addImage, BufferedImage originalImage) {

try {

/* int w = d.getWidth();

int h = d.getHeight();*/

g = originalImage.createGraphics();

g.drawImage(addImage, 593, 1875, 335, 335, null);

g.dispose();

} catch (Exception e) {

System.out.println(e.getMessage());

}

return originalImage;

}

/**

* 图片合成

* @param

* @param

*/

/* public static final void overlapImage(String bigPath, String smallPath) {

try {

BufferedImage big = ImageIO.read(new File(bigPath));

BufferedImage small = ImageIO.read(new File(smallPath));

Graphics2D g = big.createGraphics();

int x = (big.getWidth() - small.getWidth()) / 2;

int y = (big.getHeight() - small.getHeight()) / 2;

g.drawImage(small, x, y, small.getWidth(), small.getHeight(), null);

g.dispose();

ImageIO.write(big, "png", new File("D/aa/jack.png"));

System.out.println("成功");

} catch (Exception e) {

e.printStackTrace();

}

}*/

public static void main(String[] args) {

PicUtil tt = new PicUtil();

BufferedImage addImage = tt.loadImageLocal("D:/new.png");

BufferedImage originalImage = tt.loadImageLocal("D:/aa/bg.png");

//往图片上写文件

// overlapImage("D:/aa/bg.png", "D:/new.png");

//将多张图片合在一起tt.writeImageLocal("D:/aa/cc.png", tt.modifyImagetogeter(addImage, originalImage));

System.out.println("success");

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql+两天前+函数_Mysql 日期函数

一、MySQL 获得当前日期时间 函数1.获取当前日期时间(date time)&#xff1a;now()sysdate()sysdate()和now()的区别在于sysdate() 在函数执行时动态得到值, now() 在执行开始时值就得到了&#xff0c;看下面的例子就明白了&#xff1a;mysql> select sysdate(),sleep(3),s…

java队列优先级_优先级队列-Java的PriorityQueue与最小堆有何不同?

来自Java文档表示为平衡二进制堆的优先级队列&#xff1a;queue [n]的两个子级是queue [2 * n 1]和queue [2 *(n 1)]。 优先级队列由比较器或元素的自然顺序进行排序。这是使用PriorityQueue的最大堆和最小堆的工作代码-class HeapDemo {private final static int HEAP_SIZE …

deepin安装java_Deepin安装Eclipse

Deepin安装Eclipse系统环境:Deepin 15.5软件环境:Eclipse 4.7官网下载最新版elipse(4.7)安装板或压缩版均启动失败(弹框报错)&#xff0c;原因是deepin默认安装的openjdk1.9的版本,而eclipse支持的最低版本为jdk1.8版本,本机又需要jdk1.7版本的,因此需要修改eclipse启动vm参数才…

java定时任务中使用多线程_java项目中如何利用多线程实现一个定时器任务

java项目中如何利用多线程实现一个定时器任务发布时间&#xff1a;2020-11-10 16:04:03来源&#xff1a;亿速云阅读&#xff1a;86作者&#xff1a;Leah今天就跟大家聊聊有关java项目中如何利用多线程实现一个定时器任务&#xff0c;可能很多人都不太了解&#xff0c;为了让大家…

简述java在安卓开发中的应用_Java 自定义注解在安卓开发中的简单运用

定义&#xff1a;注解(Annotation)&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、接口、枚举、字段、方法、局部变量、方法参数等的前面&#xff0c;用来对这些元素进行说…

java数组个数无限_基于Java代码实现数字在数组中出现次数超过一半

下文通过几种方法给大家介绍java数组数字出现次数&#xff0c;具体内容如下所示&#xff1a;方法一&#xff1a;数组排序&#xff0c;然后中间值肯定是要查找的值。 排序最小的时间复杂度(快速排序)O(NlogN)&#xff0c;加上遍历。方法二&#xff1a;使用散列表的方式&#xff…

java合并sheet行_java poi Excel循环合并行

//Java poi 实现循环合并行&#xff0c;还是第一次遇到这种问题//在网上查了很多资料&#xff0c;都不是自己想要的//以下为自己研究后&#xff0c;写的一点东西&#xff0c;给大家分享&#xff0c;希望对大家能有思路上的启发&#xff0c;也希望大家能提出宝贵意见&#xff0c…

java类中自定义函数的调用_关于方法:自定义类中对函数的未解析引用

我无法解决看似微不足道的问题。我的问题可能是缺乏对Kotlin语言的经验(和理解)。不过&#xff0c;我将需要帮助。我做了一个自定义类&#xff0c;其中包含一个自定义函数。看起来很简单&#xff0c;但是当我尝试使用此功能时&#xff0c;我一直收到"未解决的引用"错…

java正则表达式 分词_[Java]使用正则表达式实现分词

手工分词稍嫌麻烦&#xff0c;不好维护&#xff0c;而利用正则表达式就利索多了。Java提供了java.util.regex.Matcher&#xff0c;java.util.regex.Pattern类来帮助我们实现此功能。例一&#xff1a;以下程序将把"This is a farm that that raises dairy cattle."中的…

as和java什么关系_深入理解happens-before和as-if-serial语义

概述本文大部分整理自《Java并发编程的艺术》&#xff0c;温故而知新&#xff0c;加深对基础的理解程度。指令序列的重排序我们在编写代码的时候&#xff0c;通常自上而下编写&#xff0c;那么希望执行的顺序&#xff0c;理论上也是逐步串行执行&#xff0c;但是为了提高性能&a…

java产生字符函数_java生成字符串md5函数类(javaSE)

//实现生成MD5值import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.securi…

java atomiclong 使用_Java并发AtomicLongArray类

全屏java.util.concurrent.atomic.AtomicLongArray类提供了可以原子读取和写入的底层long类型数组的操作&#xff0c;并且还包含高级原子操作。 AtomicLongArray支持对基础long类型数组变量的原子操作。 它具有获取和设置方法&#xff0c;如在变量上的读取和写入。 也就是说&am…

memcached client for java api,Memcached Client Forjava API

java_memcached-release 关键类及方法整理说明如下。 SockIOPool 这个类用来创建管理客户端和服务器通讯连接池&#xff0c;客户端主要的工作包括数据通讯、服务器定位、hash 码生成等都是由这个类完成的。 1.public static SockIOPool getInstance() 获得连接池的单态方…

对于JAVA的总结800字,java试用期转正工作总结500字

【www.gz85.com - 试用期工作总结500字】java试用期转正工作总结一年的时间,每当自己在总结它的时候,感觉是那么的短暂—弹指一挥间.而也就是在这一挥间,承载着太多太多,有收获与成就,有失败与不足.回头看看2012年的足迹,伴随着自己一年的是学习与坚持.2016年伊始是通过分销资源…

rtrim php,php rtrim() 格式化中文问题

先看以下代码var_dump(rtrim("互联网产品、", "、"));我们以为会得到结果 "互联网产品", 但实际上获得的是 ""互联网产&#xfffd;&#xfffd;"为什么呢, 其实这是编码引起的问题.rtrim()这个函数在处理字符时是按照ascii编码来…

java gbk汉字 10进制,用java程序将GBK字符转成UTF-8编码格式

UTF-8 采用变长度字节来表示字符&#xff0c;理论上最多可以到 6 个字节长度(一个字符六个字节)。UTF-8 编码兼容了 ASC II(0-127)&#xff0c; 也就是说 UTF-8 对于 ASC II 字符的编码是和 ASC II 一样的。对于超过一个字节长度的字符&#xff0c;才用以下编码规范&#xff1a…

我的世界java版刷雪球机,我的世界手机版怎么刷雪球 无限刷雪球机

随着全球变暖&#xff0c;厄尔尼诺现象加剧&#xff0c;一些生活在亚热带的孩子越来越感受不到下雪的喜悦&#xff0c;雪场的票子也是难求&#xff01;不过不要着急&#xff0c;Minecraft给你模拟了一个生存的环境&#xff0c;在这里&#xff0c;你可以和好友联机打雪仗&#x…

php请求api获取返回值,我用curl请求接口获取返回值,但是不成功,大神给看看怎么调取?...

接口地址 http://mp.vservice.com.cn/service/OutWebService?wsdl接口调用方callService(String serviceName,String servId,String secretKey,String xmlInfo)参数名称 传值serviceName&#xff1a;OAuthservId &#xff1a;服务号idsecretKey &#xff1a;服务号秘钥xmlInfo…

对于单输入多输出系统matlab,求助!!如何把多输入多输出系统的传函转换为状态空间表达式?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼这个对应的是单输入单输出的。多输入多输出的如下&#xff1a;% Thansfer multiple transfer functions into sate space modelsclcclear all;% Step1&#xff1a;输入传递函数分子分母系数%From u1 to y1num1[-0.0006086 -7.715e-…

matlab的fftn,matlab fftn

(X,m,n) fftn 进行 n 维快速傅立叶变换(反变换用 ifftn) 语法:Yffn(X) \\ Yfftn(X,siz) fftshift 快速傅立叶变换的 DC 组件移到光谱中心 语法:......(X,m,n) fftn 进行 n 维快速傅立叶变换(反变换用 ifftn) 语法:Yffn(X) \\ Yfftn(X,siz) fftshift 快速傅立叶变换的 DC 组件移…