ImgUtil文字logo位置

package io01;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.imageio.ImageIO;

public class ImgUtil {
    private String img = "";
    private String name = "";
    private String ext = "";
    private int width = 0;
    private int height = 0;
    private Random rand = new Random();
    private BufferedImage i;//缓冲图像
    private Graphics2D g;
    private Font font = new Font("", Font.BOLD, 35);

    public ImgUtil() {

    }

    public ImgUtil(String img) {
        this.setImg(img);
    }

    public ImgUtil(File img) {
        this.setImg(img.getAbsolutePath());
    }
  //生成缩略图,宽高,是否毁掉原图
    public void thumb(int width, int height, boolean flag) {
        BufferedImage dst = new BufferedImage(width, height, 1);
        Graphics2D g = dst.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
        g.drawImage(this.i, 0, 0, width, height, null);//绘制图像
        g.dispose();

        String nn = name + String.format("_ok(%d_%d).", width, height) + ext;

        try {
            if (flag) {      //图像格式,new
                ImageIO.write(dst, this.ext, new File(this.img));
            } else {//名字
                ImageIO.write(dst, this.ext, new File(nn));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void logo(File logo, int pos, boolean flag) {
                    //放哪,是否覆盖
        try {
            BufferedImage log = ImageIO.read(logo);//缓冲图像
            int lw = log.getWidth();//获取logo的宽度
            int lh = log.getHeight();
            int x = 0, y = 0;//初始坐标
            switch (pos) {
                case 1:
                    x = 30;
                    y = 30;
                    break;
                case 2:
                    x = 0;
                    y = 0;
                    break;
                case 3:
                    x = 0;
                    y = 0;
                    break;
                case 4:
                    x = 0;
                    y = 0;
                    break;
                case 5:
                    x = (int) ((this.width - lw) / 2.0);
                    y = (int) ((this.height - lh) / 2.0);
                    break;
                case 6:
                    x = 0;
                    y = 0;
                    break;
                case 7:
                    x = 0;
                    y = 0;
                    break;
                case 8:
                    x = (int) ((this.width - lw) / 2.0);
                    y = this.height - lh - 30;
                    break;
                case 9:
                    x = this.width - lw - 30;
                    y = this.height - lh - 30;
                    break;
                default:
                    x = rand.nextInt(this.width - lw) + 30;
                    y = rand.nextInt(this.height - lh) + 30;
                    break;
            }
            //水印透明,f类型
            this.g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, .5f));
            // 原始大小水印图标效果
             this.g.drawImage(log, x, y, null);
            // 改变大小水印图标效果
            //this.g.drawImage(log, x, y, lw - 50, lh - 10, null);
                   //xy 坐标, lwlh宽高,路径
this.g.dispose(); this.save(flag, "_logo"); } catch (IOException e) { e.printStackTrace(); } } public void text(String text) { text(text, 30, 5, true); } /** * @param text * @param fontSize * @param pos * @param flag */ public void text(String text, float fontSize, int pos, boolean flag) { g.setColor(new Color(255, 0, 0, 180)); try { Font font =new Font("宋体",Font.BOLD,60); } catch (Exception e) { } font = font.deriveFont(fontSize); font = font.deriveFont(Font.BOLD); g.setFont(font); FontMetrics fm = g.getFontMetrics(font); int tw = fm.stringWidth(text); int th = fm.getHeight(); int x = 0; int y = 0; switch (pos) { case 1: x = 30; y = th + 20; break; case 2: break; case 3: break; case 4: break; case 5: x = (int) ((this.width - tw) / 2.0); y = (int) ((this.height - th) / 2.0); break; case 6: break; case 7: break; case 8: break; case 9: x = this.width - 30 - tw; y = this.height - 30; break; default: x = rand.nextInt(this.width - 30 - tw) + 30; y = rand.nextInt(this.height - th - 10) + th + 10; break; } g.drawString(text, x, y); g.dispose(); this.save(flag, "_text"); } //保存 public void save(boolean flag, String txt) {//String txt "."设置自定义后缀 try { if (flag) { ImageIO.write(this.i, this.ext, new File(this.img)); } else { ImageIO.write(this.i, this.ext, new File(this.name + txt + "." + this.ext));//_text+ } } catch (Exception e) { e.printStackTrace(); } } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public String getImg() { return img; } public void setImg(String img) { this.img = img; this.name = this.img.substring(0, this.img.lastIndexOf(".")); this.ext = this.img.substring(this.img.lastIndexOf(".") + 1); try { i = ImageIO.read(new File(this.img)); this.width = i.getWidth(); this.height = i.getHeight(); this.g = i.createGraphics(); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT); } catch (Exception e) { e.printStackTrace(); } } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getExt() { return ext; } public void setExt(String ext) { this.ext = ext; } public void info() { List<String> in = new ArrayList<>(); in.add(this.img); in.add(this.ext); in.add("" + this.width); in.add("" + this.height); System.out.println(in); } }

使用

 public static void main(String[] args) {
   ImgUtil iu = new ImgUtil("d:/Auser/2.png");
//   iu.text(String.format("%1$tF %1$tT",System.currentTimeMillis()),30,5,false);
     iu.text(String.format("你说你"),30,5,false);

//水印图像
// ImgUtil iu = new ImgUtil("d:/Auser/2.png"); // iu.logo(new File("d:/Auser/log.jpg"),9,false);
//缩略图
ImgUtil iu =new ImgUtil("d:/Auser/2.png");

iu.thumb(400,400,false);
iu.thumb(350,350,false);
iu.thumb(150,150,false);

}


 

posted @ 2021-01-24 15:50  谷先生  阅读(112)  评论(0)    收藏  举报