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);
}
浙公网安备 33010602011771号