java截图写字画框

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);
    }

}

你可能感兴趣的:(java思路,java,开发语言)