package weather.com.cn.data;
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 = new Font("宋体",Font.BOLD,50) ;// 添加字体的属性设置
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){
e.printStackTrace();
}
return null;
}
/**
* 导入网络图片到缓冲区
*/
public BufferedImage loadImageUrl(String imgName) {
try{
URL url=new URL(imgName);
return ImageIO.read(url);
}catch(IOException e){
e.printStackTrace();
}
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){
e.printStackTrace();
}
}
}
/**
* 设定文字的字体等
*/
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 >= w || y >= h){
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.RED);
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){
e.printStackTrace();
}
return img;
}
/**
* 修改图片,返回修改后的图片缓冲区(输出多个文本段) flag:true表示将内容在一行中输出;false表示将内容多行输出
*/
public BufferedImage modifyImage(BufferedImage img, Object[] contentArr, int x, int y, boolean flag) {
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(flag){
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 + 100;// 重新计算文本输出位置
}
}else{
for(int i=0; i < arrlen; i++){
g.drawString(contentArr[i].toString(),this.x,this.y);
this.y+=this.fontsize + 50;// 重新计算文本输出位置
}
}
}
g.dispose();
}catch(Exception e){
System.out.println(e.getMessage());
}
return img;
}
/**
* 修改图片,返回修改后的图片缓冲区(只输出一行文本)--给图片增加水印
*/
public BufferedImage modifyImage1(BufferedImage img, String imageUri, 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 >= w || y >= h){
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.RED);
int x1 = ran.nextInt(w);
int y1 = ran.nextInt(h);
g.drawLine(x1,y1,x1,y1);
}
if(imageUri != null || !"".equals(imageUri)){
BufferedImage image=ImageIO.read(new File(imageUri));
g.drawImage(image, null,this.x,this.y);
}
g.dispose();
}catch(Exception e){
e.printStackTrace();
}
return img;
}
}
这是我总结了别人的,非原著