import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
public class ImageHelper {
/**
*
* @param url 图片的url
* @param targetFile 目标图片的地址
* @param thin 边框宽度
* @param x 截取图片的x的坐标点
* @param y 截图图片的y的坐标点
* @param width 截图的宽度
* @param height 截图的高度
* @param arcWidth 截图的四角弧的水平直径
* @param arcHeight 截图的四交互的垂直直径
* @param fontSize 字体大小
* @param text 书写的文本内容
* @throws IOException
*/
public static void drawCutImage(String url, String targetFile,int thin, int x, int y, int width, int height,int arcWidth,int arcHeight, int fontSize, String text) throws IOException {
FileOutputStream out = null;
try{
// 获得url图片
BufferedImage image = ImageIO.read(new URL(url));
// 裁剪图片
image = image.getSubimage(x,y,width,height);
// 设置画笔颜色和粗细
Graphics2D g = image.createGraphics();
g.setColor(Color.YELLOW);
g.setStroke(new BasicStroke(thin*2));
// x–要绘制的矩形的x坐标。y–要绘制的矩形的y坐标。宽度–要绘制的矩形的宽度。高度–要绘制的矩形的高度。arcWidth–四角弧的水平直径。arcHeight–四角弧的垂直直径。
g.drawRoundRect(0, 0, width, height, arcWidth, arcHeight);
// 定义字体和字体颜色
Font font = new Font("宋体",Font.BOLD, fontSize);
g.setFont(font);
g.setColor(Color.BLACK);
// g.setBackground(Color.white); 设置背景颜色
// g.drawImage(image, 0, 0, null);
// 10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
// g.drawString(text, 20, 20);
// 写字
ImageHelper.drawString(g , font , text , thin,thin+fontSize ,width/fontSize*fontSize-fontSize);
out = new FileOutputStream(targetFile);
ImageIO.write(image,"jpg" , out);
out.close();
}finally {
if (out != null){
out.close();
}
}
}
/***
* 写字居中
* @param g Graphics2D 画笔
* @param font Font 字体
* @param text 文本内容 需要写的文本内容
* @param x 在图片上的起始点X轴坐标
* @param y 在图片上的起始点Y轴坐标
* @param maxWidth 一行文字的宽度
*/
public static void drawString(Graphics2D g , Font font , String text , int x , int y , int maxWidth) {
JLabel label = new JLabel(text);
label.setFont(font);
FontMetrics metrics = label.getFontMetrics(label.getFont());
int textH = metrics.getHeight();
int textW = metrics.stringWidth(label.getText()); //字符串的宽
String tempText = text;
while(textW > maxWidth) {
int n = textW / maxWidth;
int subPos = tempText.length() / n;
String drawText = tempText.substring(0 , subPos);
int subTxtW = metrics.stringWidth(drawText);
while(subTxtW > maxWidth) {
subPos--;
drawText = tempText.substring(0 , subPos);
subTxtW = metrics.stringWidth(drawText);
}
g.drawString(drawText , x , y);
y += textH;
textW = textW - subTxtW;
tempText = tempText.substring(subPos);
}
g.drawString(tempText , x , y);
}
/***
*
* @param g Graphics2D
* @param font Font
* @param text 文本内容
* @param x 起始点X轴坐标
* @param y 起始点Y轴坐标
* @param maxWidth 文字最大长度
*/
public static void content(Graphics2D g , Font font , String text , int x , int y , int maxWidth) {
FontMetrics fontMetrics = g.getFontMetrics(font);
int textWidth = fontMetrics.stringWidth(text);
int X = (maxWidth - textWidth) / 2;
g.drawString(text,x+X,y);
}
}